文字列内の連続した繰り返し文字ブロックをすべて検索します。たとえば、次のようになります。
s = r'http://www.google.com/search=ooo-jjj'
私が見つけたいのは、www
、ooo
、 です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 回以上繰り返す必要があるということです。