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)