Python按模式拆分字符串

Tro*_*rot 6 python regex string split

我有类似的字符串"aaaaabbbbbbbbbbbbbbccccccccccc".字符的数量可以不同,有时可以在字符串内划线,比如"aaaaa-bbbbbbbbbbbbbbccccccccccc".

有没有什么聪明的办法要么把它分解"aaaaa","bbbbbbbbbbbbbb","ccccccccccc"并获得被它拆分或刚刚得到的指数的指数,而无需通过每个字符串循环?如果短划线位于模式之间,只要它总是处理相同,它就可以在左边或右边结束.

任何的想法?

Mar*_*ers 11

正则表达式MatchObject结果包括匹配的索引.剩下的就是匹配重复的字符:

import re

repeat = re.compile(r'(?P<start>[a-z])(?P=start)+-?')
Run Code Online (Sandbox Code Playgroud)

仅当给定的字母字符(a- z)至少重复一次时才匹配:

>>> for match in repeat.finditer("aaaaabbbbbbbbbbbbbbccccccccccc"):
...     print match.group(), match.start(), match.end()
... 
aaaaa 0 5
bbbbbbbbbbbbbb 5 19
ccccccccccc 19 30
Run Code Online (Sandbox Code Playgroud)

匹配结果的.start().end()方法为您提供输入字符串中的确切位置.

破折号包含在匹配项中,但不包含非重复字符:

>>> for match in repeat.finditer("a-bb-cccccccc"):
...     print match.group(), match.start(), match.end()
... 
bb- 2 5
cccccccc 5 13
Run Code Online (Sandbox Code Playgroud)

如果您希望a-零件匹配,只需将其替换+*乘数:

repeat = re.compile(r'(?P<start>[a-z])(?P=start)*-?')
Run Code Online (Sandbox Code Playgroud)