-1

拡張子付きの文 (文字列) から単語のリストを取得する Python 関数を作成したいと考えています。拡張子は、強調するために英語で (3 つ以上) 文字を繰り返すことです。たとえば、「bessssst」という単語には拡張子が含まれています。私の関数は、「Bob is the bessssst」などの文を取ります。そして戻る['besssst']

最初はpythonで正規表現を使ってみたのですが( re.match('[a-zA-Z][a-zA-Z][a-zA-Z]+'))、拡張子だけでなく単語そのものが欲しいです。

4

5 に答える 5

2

最適化されておらず、いくつかの文字列でのみ試しました。

>>> 
>>> pattern = "\s(\w*?(?P<ext>\w)(?P=ext){2,}\w*?)\W"
>>> s1 = "Bob is the bessssst."
>>> s2 = "Bob is the bessssst ."
>>> ext_re = re.compile(pattern)
>>> m = ext_re.search(s1)
>>> m.groups()
('bessssst', 's')
>>> m = ext_re.search(s2)
>>> m.groups()
('bessssst', 's')
>>> 

Python 正規表現ツール

于 2013-10-12T00:27:37.363 に答える
2

あなたが正規表現を期待していることは知っていますが、これは正規表現を使用せず、 itertools.groupbyを使用します

strs = "Bob is the bessssst."
from itertools import groupby
print [str for str in strs.split() for k, g in groupby(str) if len(list(g)) > 2]

出力

['bessssst.']
于 2013-10-12T02:50:41.693 に答える
1

Pythonまたはその正規表現の実装についてはまったく知りませんが、これを試してください

\w+([a-zA-Z])\1{2}\w*
于 2013-10-12T02:49:39.070 に答える
1

私は使うだろう:

re.findall(r'(\b\w*(?P<letter>\w)(?P=letter){2}\w*\b)', yourstring)
于 2013-10-12T00:13:14.330 に答える