【发布时间】:2021-05-04 15:35:48
【问题描述】:
我正在尝试遍历文件中的所有行以匹配可以匹配的模式;
- 出现在文件中的任意位置
- 在同一个文件中多次出现
- 在同一行多次出现
- 对于一个正则表达式模式,我正在搜索的字符串可能分布在多行中
一个示例输入是;
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}'
查看文档here,我可以看到 match、findall 和 finditer 都在字符串的开头返回匹配项,但我没有看到使用搜索函数的方法,该函数查看正则表达式的任何位置我们要搜索的字符串是多行的(上面我的要求中的第四个)。
足够简单,可以匹配每行不止一次出现的正则表达式;
示例输入:
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 的正则表达式来做我正在寻找的事情?
【问题讨论】:
标签: python python-3.x regex