0

私はこのテキストを持っています:

a aa aaa aaa aaaa aa aaa

そして、テキスト内のすべてのシーケンスをキャッチする必要がありaaaますが、のように 4 つ連続している場合は無視しますaaaa。理想的なケースでは、これを検出できます。

a aa **aaa**  **aaa** aaaa aa **aaa**

現在、私はこの正規表現を持っています:

[^a]aaa[^a]

これは、最初と最後のシーケンス 'aaa' でうまく機能しますが、間のスペースがaaa aaa最初のパターンに属しているため、2 番目のシーケンスをキャッチできません。

a aa **aaa**  aaa aaaa aa **aaa**

この正規表現を作成する方法についてのアイデアはありますか?

4

2 に答える 2

5

次の正規表現を使用できます。

\ba{3}\b
  • ここで\bは単語の境界を意味します。
  • a{3}a正確に一致することを意味します
  • \ba{3}\bは、単語境界で囲まれている 3 つの a に一致することを意味します。したがって、一致しないaaaaaaab、一致しません。
于 2013-10-31T18:47:30.417 に答える
1

スペースの外側のシーケンスの一部である場合は、aaa もキャッチしたいと思います。

aaabbccaabccaccbbbaaaccbbaaaaccbbaacccaaab
^^^               ^^^                 ^^^  

この場合、否定的なルックアラウンドが最善の策です。

re.findall('(?<!a)aaa(?!a)', mystring)

(?<!a)は「前に " がない」ことを意味しaます。

aaaあなたの 3 つの s に一致しますa

(?!a)は、" が続かないことを意味しaます。

したがって、上記は、一致する 3 の直前または直後にaaa追加の s がない場合にのみ一致します。a

于 2013-10-31T23:01:26.080 に答える