我想编写一个 python 函数,从带有扩展名的句子(字符串)中获取单词列表。扩展是重复(3 个或更多)英文字母以进行强调。例如,单词“bessssst”包含一个扩展名。我的函数会采用诸如“Bob is the besssst”之类的句子。并返回['besssst']
起初我尝试在 python ( re.match('[a-zA-Z][a-zA-Z][a-zA-Z]+')
) 中使用正则表达式,但我想要单词本身,而不仅仅是扩展名。
我知道你期待 RegEx,但这个不使用 RegEx 并使用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.']
你可以做..
import re
def find_ext(text):
return re.search(r'(\w*(.)\2{2}\w*)', text).group(1)
s = 'Bob is the bessssst'
find_ext(s)
如果这让您感到困惑,请使用..
return re.search(r'(\w*(\w)\2{2}\w*)', text).group(1)
没有优化,只在几个字符串上尝试过。
>>>
>>> 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')
>>>
我会使用:
re.findall(r'(\b\w*(?P<letter>\w)(?P=letter){2}\w*\b)', yourstring)
我对 python 或其正则表达式实现知之甚少,但是试试这个
\w+([a-zA-Z])\1{2}\w*