我正在寻找一种正则表达式模式来过滤句子中没有重复连续字符的单词。
我已尝试将r'(?!.*(\w)\1{3,}).+'
作为正则表达式模式,但它不起作用。
例如,在句子“ mike is amaaazing”中,我希望正则表达式模式仅选择“ mike”和“ is”。
有什么想法吗?
答案 0 :(得分:3)
您必须在开头使用单词边界,并用\w
代替点,以确保您的超前性不会超出测试单词的范围。
>>> s = 'mike is amaaazing'
>>> [m[1] for m in re.findall(r'\b(?!\w*?(\w)\1)(\w+)', s)]
['mike', 'is']
由于re.findall
仅在模式中定义时返回捕获组,因此您可以使用列表推导来提取第二个捕获组(即整个单词)。
答案 1 :(得分:2)