3

「.(ピリオド) ではない同じ文字の連続チェーン」と一致させようとしています。

私が持っているとしましょう

line = '....xooo......'

私がこれを行うと、

match in re.findall(r'[^\.]{2,}', line)

一致すると「xooo」が返されます。

代わりに、同じ文字のシーケンスである「ooo」のみが必要です..

どうすればいいですか?

4

2 に答える 2

2
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']
于 2013-11-13T01:36:46.627 に答える