re を使用して連続する繰り返し文字を検索する方法 質問する

re を使用して連続する繰り返し文字を検索する方法 質問する

文字列内の連続した繰り返し文字ブロックをすべて検索します。たとえば、次のようになります。

s = r'http://www.google.com/search=ooo-jjj'

私が見つけたいのは、wwwooo、 ですjjj

私は次のようにしてみました:

m = re.search(r'(\w)\1\1', s)

しかし、期待通りに動作しないようです。何かアイデアはありますか?

また、Bash でこれを行うにはどうすればよいですか?

ベストアンサー1

((\w)\2{2,})3文字以上の連続した文字に一致します。

In [71]: import re
In [72]: s = r'http://www.google.com/search=ooo-jjjj'
In [73]: re.findall(r'((\w)\2{2,})', s)
Out[73]: [('www', 'w'), ('ooo', 'o'), ('jjjj', 'j')]

In [78]: [match[0] for match in re.findall(r'((\w)\2{2,})', s)]
Out[78]: ['www', 'ooo', 'jjjj']

(\w)任意の英数字に一致します。

((\w)\2)\2は、グループ番号 2 の内容と一致するため、任意の英数字とその後に続く同じ文字に一致します。括弧をネストしたため、グループ番号 2 は に一致する文字を参照します\w

これらすべてを組み合わせると、((\w)\2{2,})任意の英数字に一致し、その後に同じ文字が繰り返されます。2回以上追加

つまり、正規表現では文字を 3 回以上繰り返す必要があるということです。

おすすめ記事