-1

我想编写一个 python 函数,从带有扩展名的句子(字符串)中获取单词列表。扩展是重复(3 个或更多)英文字母以进行强调。例如,单词“bessssst”包含一个扩展名。我的函数会采用诸如“Bob is the besssst”之类的句子。并返回['besssst']

起初我尝试在 python ( re.match('[a-zA-Z][a-zA-Z][a-zA-Z]+')) 中使用正则表达式,但我想要单词本身,而不仅仅是扩展名。

4

5 回答 5

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.']
于 2013-10-12T02:50:41.693 回答
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)
于 2013-10-12T02:21:21.617 回答
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 回答
1

我会使用:

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

我对 python 或其正则表达式实现知之甚少,但是试试这个

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