「.(ピリオド) ではない同じ文字の連続チェーン」と一致させようとしています。
私が持っているとしましょう
line = '....xooo......'
私がこれを行うと、
match in re.findall(r'[^\.]{2,}', line)
一致すると「xooo」が返されます。
代わりに、同じ文字のシーケンスである「ooo」のみが必要です..
どうすればいいですか?
re.search(r'(([^.])\2{1,})', line).group(1)
説明:
"(([^.])\2{1,})"
1st Capturing group (([^.])\2{1,})
2nd Capturing group ([^.])
Negated char class [^.] matches any character except:
. The character .
\2 1 to infinite times [greedy] Matches text saved in the 2nd capturing group
その制約のすべての一致が必要な場合:
>>> line = '....xooo...xx..yyyyy.'
>>> map(lambda t: t[0], re.findall(r"(([^.])\2+)", line))
# ['ooo', 'xx', 'yyyyy']