正規表現MatchObject
の結果には、一致のインデックスが含まれます。残っているのは、繰り返し文字を一致させることです:
import re
repeat = re.compile(r'(?P<start>[a-z])(?P=start)+-?')
指定された文字 ( a
- z
) が少なくとも 1 回繰り返される場合にのみ一致します。
>>> for match in repeat.finditer("aaaaabbbbbbbbbbbbbbccccccccccc"):
... print match.group(), match.start(), match.end()
...
aaaaa 0 5
bbbbbbbbbbbbbb 5 19
ccccccccccc 19 30
一致結果の.start()
および.end()
メソッドは、入力文字列内の正確な位置を示します。
ダッシュは一致に含まれますが、繰り返さない文字は含まれません:
>>> for match in repeat.finditer("a-bb-cccccccc"):
... print match.group(), match.start(), match.end()
...
bb- 2 5
cccccccc 5 13
部分を一致させたい場合は、単純に乗数a-
に置き換えます。+
*
repeat = re.compile(r'(?P<start>[a-z])(?P=start)*-?')