Python Regex:如何解析字符串中重复的组?

时间:2017-11-15 00:52:50

标签: python regex regex-group

我希望将模式与包含纯数字的字符串匹配,例如' 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时,我不知道编译它的语法。有人有想法吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

我认为这比最初的预期更容易实现:

26[68]+?[687]+?4

  

2,接着逐-6-随后逐6 | 8随后逐6 | 8 | 7 - 接着 - 4

唯一不那么明显的部分就是让模式变得懒惰。

这是一个更好的模式:

\b26?([^7]6|8|[^6]7)+?4\b

  

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)]。

是每个匹配项的开始和结束索引的元组列表。