免责声明:我发现很多类似的问题,但不是具体的问题。一旦有人回答,我会删除它。你知道吗
我需要找到所有的蒙面词,比如:
AAAAA likes apples, but BBBBB likes bananas. Their phone numbers are ffffr and ggggh.
图案至少是重复字符的三倍。你知道吗
当我使用:
import re
p = re.compile(r'[a-z]{3,}, re.IGNORECASE)
m = p.findall('AAAAA likes apples, but BBBBB likes bananas. Their phone numbers are ffffr and ggggh.')
我只得到所有单词(包含3个以上字符)。你知道吗
理想情况下,我应该只得到:
m = ['AAAAA', 'BBBBB', 'ffffr', 'ggggh']
我应该如何改变愤怒的规则来只捕捉那些?你知道吗
谢谢!你知道吗
您可以使用正则表达式,但我建议使用其他方法,即:
请注意,现在
found
与所需的输出不完全相同,因为最后一个元素中有.
,但我们可以通过以下方式轻松删除任何尾随标点:我的方法说明:我得到单词的前3个字符,将它们全部小写,然后使用
set
检查是否只有一个字母(字符)。或者您可以使用.upper
的str
方法。如果您认为基于regex的解决方案更适合您的用例,请随意使用它,但请记住,对于某些问题,存在非regex解决方案的可能性。你知道吗在这里,如果我们想捕获一个单词,我们将使用一个单词边界,并使用类似于以下表达式的反向引用:
Demo
测试
正则表达式电路
jex.im可视化正则表达式:
您当前的正则表达式只检查三个或更多的
[a-z]
,而不检查重复的。为了检查一个字母是否重复,您需要稍后再capture和backreference检查它。使用re.IGNORECASE
\b
匹配word boundary\w
与word character匹配([a-z])
捕获到\1
的字母字符\1
是对第一个组捕获的内容的反向引用See demo at regex101
这将匹配至少3个被任意数量的
\w
字字符包围的重复[a-z]
。你知道吗相关问题 更多 >
编程相关推荐