python -regex match 和 for 循环逐行运行文件

bio*_*ant 3 python regex loops for-loop file

所以我试图将文件的每一行与正则表达式匹配,我做了以下事情:

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)
Run Code Online (Sandbox Code Playgroud)

预期输出是每行中的特定 6 个字符,而是出现如下错误:

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

我发现(从下面的链接)要将正则表达式与文件的每一行匹配,必须首先将文件转换为 file.read() 列表

匹配文件对象中的多行正则表达式

要重新处理帖子,是否有更简单的方法(最好超过 1 行而不是 2 行)?

humsavar=open('/home/jyt109/humsavar.txt')
text=humsavar.read()
Run Code Online (Sandbox Code Playgroud)

谢谢!

And*_*ark 5

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

如果要分别检查每一行,可以使用file.readlines()获取行列表或仅遍历文件对象,例如:

with open('/home/jyt109/humsavar.txt') as f:
    for line in f:
        match = regex.search(line)
Run Code Online (Sandbox Code Playgroud)

假设您仍然想一次读取整个文件内容,您可以像这样在一行中执行此操作:

text = open('/home/jyt109/humsavar.txt').read()
Run Code Online (Sandbox Code Playgroud)