首页 > 解决方案 > Python 正则表达式匹配包含两个或更少 o 字符的空格分隔的单词

问题描述

我是 python 新手,正在尝试解决一些问题(以学习方式)。
我想匹配包含两个或更少 o 字符的空格分隔的单词。
这就是我实际所做的:

import re

pattern = r'\b(?:[^a\s]*o){1}[^a\s]*\b'

text = "hop hoop hooop hoooop hooooop"
print(re.findall(pattern, text))

当我运行我的代码时,它确实匹配字符串中的所有单词。有
什么建议吗?

标签: pythonpython-3.xregex

解决方案


您可以使用

import re
pattern = r'(?<!\S)(?:[^\so]*o){0,2}[^o\s]*(?!\S)'
text = "hop hoop hooop hoooop hooooop"
print(re.findall(pattern, text))

# Non  regx solution:
print([x for x in text.split() if x.count("o") < 3])

请参阅Python 演示。两者都有['hop', 'hoop']

(?<!\S)(?:[^\so]*o){0,2}[^o\s]*(?!\S)则表达式匹配

  • (?<!\S)- 左侧空白边界
  • (?:[^\so]*o){0,2}- 零、一或两次出现除空格和字符之外的任何零个或多个字符o,然后是一个o字符
  • [^o\s]*o- 除了和空格之外的零个或多个字符
  • (?!\S) - 右侧空白边界

推荐阅读