我想写一个python函数,它从带有扩展名的句子(字符串)中获取单词列表。扩展名是英语中重复的(3个或更多)字母以强调。例如,单词“bessssst”包含一个扩展名。我的功能将采取诸如“鲍勃是最好的”这样的句子。并返回['besssst']
起初我尝试在python(re.match('[a-zA-Z][a-zA-Z][a-zA-Z]+')
)中使用正则表达式,但我想要单词本身,而不仅仅是扩展名。
答案 0 :(得分: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')
>>>
答案 1 :(得分:2)
你可以做..
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)
答案 2 :(得分:2)
我知道你期待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.']
答案 3 :(得分:1)
我会用:
re.findall(r'(\b\w*(?P<letter>\w)(?P=letter){2}\w*\b)', yourstring)
答案 4 :(得分:1)
我对python或其正则表达式实现一无所知,但试试这个
\w+([a-zA-Z])\1{2}\w*