因此,如果我在python(3.7)中创建一个程序,如下所示:
import re
regx = re.compile("test")
print(regx.findall("testest"))
运行它,然后我会得到:
["test"]
即使有两个“测试”实例,它也只是向我展示一个我认为是因为第二个“测试”中使用了第一个“测试”的字母。我该如何制作一个可以给我["test", "test"]
结果的程序?
答案 0 :(得分:4)
您将要使用具有(?=(regex_here))
提前功能的捕获组:
import re
regx = re.compile("(?=(test))")
print(regx.findall("testest"))
>>> ['test', 'test']
答案 1 :(得分:-1)
正则表达式表达式很贪心。它们消耗尽可能多的目标字符串。一旦消耗掉字符,就不会再次检查它,因此找不到重叠的图案。
为此,您需要使用称为正则断言的python正则表达式功能。您将查找字符t
后跟est
的实例。向前看不会消耗字符串的一部分。
import re
regx = re.compile('t(?=est)')
print([m.start() for m in regx.finditer('testest')])
[0,3]
此页面上的更多详细信息:https://docs.python.org/3/howto/regex.html