如何使用Python正则匹配含2个及以下o字符的空格分隔单词
原正则的问题
- 量词
{1}仅限定匹配至少1个o,没有设置数量上限,只要单词包含至少1个o就会被匹配,无法拦截3个及以上o的单词 - 排除类字符集写错为
[^a\s],本应该排除的是字符o而非a,导致完全没起到统计o数量的作用
修正后的实现
要求匹配包含2个及以下o的单词,正则可以写为:r'\b(?:[^o\s]*o){0,2}[^o\s]*\b'
(?:[^o\s]*o){0,2}:非捕获组,最多匹配2次「非o、非空白字符后跟一个o」的结构,把单词内的o数量限制在0~2个- 末尾的
[^o\s]*匹配单词剩下的所有非o、非空白字符,保证完整匹配整个单词 - 如果你的需求是至少1个最多2个o,把量词
{0,2}改成{1,2}即可
完整运行代码:
import re pattern = r'\b(?:[^o\s]*o){0,2}[^o\s]*\b' text = "hop hoop hooop hoooop hooooop" print(re.findall(pattern, text))
运行输出:
['hop', 'hoop']
内容的提问来源于stack exchange,提问作者Gothiquo
相关产品推荐
相关产品推荐

