我希望将模式与包含纯数字的字符串匹配,例如' 2324235235980980'使用如下所述的模式:
模式是2-6-8-7-4',模式以2开始,转移到6,自循环为6或转移到8,然后它可以去在6到8之间来回,可以在8处自行循环,或者可以转换到7.对于7来说同样的事情.7的另一件事是7-8-6-8-7可能发生。最后,7可以达到4,一旦达到4,模式就完成了。在此过程中,如果它到达其他点,则必须再次以2开始计算。 我用
import re
re.findall(r'(2((6+8+)+)7)', test_string)
输出包括' 2666686888668887',但是当我添加4时,我不知道编译它的语法。有人有想法吗?非常感谢!
答案 0 :(得分:1)
我认为这比最初的预期更容易实现:
2,接着逐-6-随后逐6 | 8随后逐6 | 8 | 7 - 接着 - 4
唯一不那么明显的部分就是让模式变得懒惰。
这是一个更好的模式:
2 - 接着逐(not7)6 | 8 |。(not6)7-接着 - 4
答案 1 :(得分:0)
我不知道我是否理解你的需要,但也许这对你有用:
string = "2666686888668887748926874"
index = [(m.start(0), m.end(0)) for m in re.finditer(r'2(6+8+)+7+\1?4', string)]
print(index)
版画:[(0,18),(20,25)]。
是每个匹配项的开始和结束索引的元组列表。