我试图迭代文件中的所有行,以匹配可能出现的模式;
- 可以在文件的任何位置发生
- 在同一个文件中多次出现
- 在同一行上多次出现
- 我正在搜索的字符串可能会为一个正则表达式模式跨越多行
一个示例输入如下;
new File()
new
File()
there is a new File()
new
File()
there is not a matching pattern here File() new
new File() test new File() occurs twice on this line
例如输出结果如下:
new File() Found on line 1
new File() Found on lines 2 & 3
new File() Found on line 4
new File() Found on lines 5 & 9
new File() Found on line 11
new File() Found on line 11
6 occurrences of new File() pattern in test.txt (Filename)
正则表达式模式可能如下所示:
pattern = r'new\s+File\s*\({1}\s*\){1}'
查看这里的文档,我可以看到match、findall和finditer都返回字符串开头的匹配项,但我没有看到使用search函数的方法,该函数查找任何位置的正则表达式,在我们搜索的字符串跨越多行时(以上是我提出的第四个要求)。
很容易通过以下方式匹配每一行中出现的多个正则表达式:
输入示例:
line = "new File() new File()"
代码:
i = 0
matches = []
while i < len(line):
while line:
matchObj = re.search(r"new\s+File\s*\({1}\s*\){1}", line, re.MULTILINE | re.DOTALL)
if matchObj:
line = line[matchObj.end():]
matches.append(matchObj.group())
print(matches)
打印以下匹配项 - 目前不包括行号等:
['new File()', 'new File()']
有没有办法使用Python的正则表达式来实现我想要的功能?
re.MULTILINE|re.DOTALL
在这里是多余的,因为没有任何.
,^
和$
模式需要使用这些选项来修改其行为。 - Wiktor Stribiżew