Python Regex-打印以T开头的行

Python Regex-打印以T开头的行,python,regex,python-2.7,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) 第二个解决方案中的错误

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

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

对于
^
,要匹配每行的开头,而不仅仅是整个字符串,您需要使用。您可以在正则表达式本身中执行此操作:

re.findall('(?m)^T', ...)
或作为
标志
参数:

re.findall('^T', ..., flags=re.M)  # M is an alias for MULTILINE
请注意,这只会为您提供
'T'
s-将行的其余部分包含在需要添加到模式的匹配项中,例如
*

快速演示:

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

您需要使用
^
来匹配行的开头,而不仅仅是字符串的开头。
打印re.findall(r'(?m)^T',f1)
这里演示了
re.m
修饰符的用法。它是同一个修饰符,一个是内联的,另一个是非内联版本。@Borja“更好”如何使用?我觉得前者更具可读性,但这只是一种观点,我怀疑在性能上会有什么不同。