python-regex匹配和for循环,逐行运行文件

python-regex匹配和for循环,逐行运行文件,python,regex,file,loops,for-loop,Python,Regex,File,Loops,For Loop,因此,我尝试将文件的每一行与正则表达式匹配,并执行了以下操作: import re regex='\S+\s+(\S{6})\s+VAR' with open('/home/jyt109/humsavar.txt') as humsavar: for line in humsavar: match=regex.search(line) print match.group(1) 预期输出是每行中的特定6个字符,而我得到的错误如下: Traceback (m

因此,我尝试将文件的每一行与正则表达式匹配,并执行了以下操作:

import re
regex='\S+\s+(\S{6})\s+VAR'
with open('/home/jyt109/humsavar.txt') as humsavar:
    for line in humsavar:
        match=regex.search(line)
        print match.group(1)
预期输出是每行中的特定6个字符,而我得到的错误如下:

Traceback (most recent call last):
  File "exercise.py", line 74, in <module>
    match=regex.search(line)
AttributeError: 'str' object has no attribute 'search'

谢谢

我想你可能误解了链接的意思。如果正则表达式的匹配可以跨越多行,则需要使用
file.read()
读取文件。如果换行符永远不会成为匹配的一部分,那么您可以逐行读取文件,并尝试分别匹配每一行

如果要单独检查每一行,可以使用
file.readlines()
获取行列表,或只是迭代文件对象,例如:

with open('/home/jyt109/humsavar.txt') as f:
    for line in f:
        match = regex.search(line)
假设您仍然希望一次读取整个文件内容,请在一行中执行此操作,如下所示:

text = open('/home/jyt109/humsavar.txt').read()
.read()
不会将文件转换为列表(
.readlines()
会);相反,它将整个文件放入一个字符串中

但即使这样,您也可以使用正则表达式:当使用
re.MULTILINE
编译它时,锚定
^
$
将匹配单个行的开始和结束:

>>> regex = re.compile(r"^Match this regex in each line$", re.MULTILINE)
>>> regex.findall(text)

结果将是所有匹配项的列表。

这里是一个简单的一行。我在下面的数据文件中测试了它。当使用正则表达式时,可以像我在下面所做的那样方便地使用。我不知道您的数据文件是什么样子的,但我只是制作了一个与您指定的搜索模式匹配的数据文件

代码

import re
print re.findall(r'\S+\s+(\S{6})\s+VAR', open('/tmp/test.txt').read())
输出

['000001', '000002', '123456']
x 000001 VAR
x 000002 VAR
x 123456 VAR
test.txt

['000001', '000002', '123456']
x 000001 VAR
x 000002 VAR
x 123456 VAR

你可以把样本文件和预期的输出。比如你在找什么