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
你可以把样本文件和预期的输出。比如你在找什么