我有一些带有一些行的文本文件,我想打印以T开头的行。
这可以工作并提供所需的输出:
f = open("path", 'r')
for line in f:
match = re.search(r'^T', line)
if match:
print line
但是这没有按预期工作,它打印一个空列表[]
而不是包含以T开头的行的数组:
f1 = open("path").read()
print re.findall(r'^T', f1)
第二个解决方案中的错误在哪里?
答案 0 :(得分:4)
要使^
匹配每行的开头,而不是整个字符串,您需要使用MULTILINE
flag。您可以在正则表达式中执行此操作:
re.findall('(?m)^T', ...)
或flags
参数:
re.findall('^T', ..., flags=re.M) # M is an alias for MULTILINE
请注意,仅会为您提供'T'
- 在您需要添加的匹配项中包含其余部分,例如.*
到模式。
快速演示:
>>> import re
>>> text = """Here is some demo text
This line starts with a T
But this one doesn't
That's OK"""
>>> re.findall('^T', text)
[] # no multiline match, no results
>>> re.findall('^T', text, re.M)
['T', 'T'] # multiline match, only T in the results
>>> re.findall('^T.*', text, re.M)
['This line starts with a T', "That's OK"] # hooray!