Python 正则表达式匹配包含两个或更少 o 字符的空格分隔的单词
Posted
技术标签:
【中文标题】Python 正则表达式匹配包含两个或更少 o 字符的空格分隔的单词【英文标题】:Python regex match space-separated words that contain two or fewer o characters 【发布时间】:2021-12-24 03:55:08 【问题描述】:我是 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))
当我运行我的代码时,它确实匹配字符串中的所有单词.. 有什么建议吗?
【问题讨论】:
您可以在regex101 之类的网站上阅读有关正则表达式和训练的信息。那里解释了你的模式。 【参考方案1】:你可以使用
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 demo。两者都产生['hop', 'hoop']
。
(?<!\S)(?:[^\so]*o)0,2[^o\s]*(?!\S)
正则表达式匹配
(?<!\S)
- 左侧空白边界
(?:[^\so]*o)0,2
- 除空格和o
char 和o
char 之外的任何零个或多个字符出现零次或两次出现
[^o\s]*
- 除了o
和空格之外的零个或多个字符
(?!\S)
- 右侧空白边界
【讨论】:
以上是关于Python 正则表达式匹配包含两个或更少 o 字符的空格分隔的单词的主要内容,如果未能解决你的问题,请参考以下文章