正则表达式 - 以T开头打印行

时间:2015-10-23 13:05:05

标签: python regex python-2.7

我有一些带有一些行的文本文件,我想打印以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)

第二个解决方案中的错误在哪里?

1 个答案:

答案 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!