如何在python中找到扩展并替换它们?

时间:2013-10-12 00:07:46

标签: python regex

我想写一个python函数,它从带有扩展名的句子(字符串)中获取单词列表。扩展名是英语中重复的(3个或更多)字母以强调。例如,单词“bessssst”包含一个扩展名。我的功能将采取诸如“鲍勃是最好的”这样的句子。并返回['besssst']

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

5 个答案:

答案 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')
>>> 

Python Regex Tool

答案 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*