2012-04-21 10 views
4

私はPython reを使用して、同じ文字または数字のセットを特定の回数繰り返して検索しようとしています。 (.)は何が繰り返されるかを特定するのには問題ありませんが、別の文字を繰り返すことを避ける方法はありません。ここで私が持っているものです。同じ文字を正規表現で正確に一致させる

re.search(r'(.){n}', str) 

ので、例えばそれがn = 3場合n = 4場合99997から9999と一致しますが、ではないでしょう。
おかげ

+0

このウェブサイトはあなたの友人です:http://www.txt2re.com/index-php.php3 –

+2

あなたはあなたが*一致させたいものと*一致させたくないものを明確にすることができますか?私は「別のキャラクターを繰り返すことからそれを保つ方法を見つけることができません」という意味を理解していません。 –

+0

n回繰り返しているものと一致したいので、9回繰り返す場合は9999回、T回繰り返す場合はTTTTが必要ですが、私が言うと9897が必要です。{4} – cah

答えて

4

どの程度

(?:^|(?<=(.)))(?!\1)(.)\2{n-1}(?!\2) 

これます:

  • (?:^|(?<=(.)))
    • ^::私たちは、文字列
    • (?<=(.))の先頭にあるいずれかのことを確認してください:私たちはthにいないe文字列の先頭。その後、試合前の文字をキャプチャし、\1
  • (?!\1)(.)にそれを保存します。\1ではない任意の文字に一致し、\2
  • \2{n-1}にそれを保存します。一致\2のn-1回
  • (?!\2):ください\2がお待ちしております。

n-1は象徴的ですが、明らかにこれを8-1などではなく、n-1の実際の値)。

重要編集:それは試合の後ろ\1に一致する文字を説明するために失敗したので、正規表現の以前のバージョン((.)\1{n-1}(?!\1))は動作しません。上の正規表現はこの問題を解決します。

+0

これはうまくいけて、最初のように私はあなたをチェックしますが、それは何らかの理由で4分待っています。 – cah

+1

答えをもう一度読んでください。以前のバージョンの私の答えはうまくいかなかった。上記は今すぐうまくいくはずです。 –

+2

頑固な持続性に感謝します! – cah

関連する問題