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']

(?&lt;!\S)(?:[^\so]*o)0,2[^o\s]*(?!\S) 正则表达式匹配

(?&lt;!\S) - 左侧空白边界 (?:[^\so]*o)0,2 - 除空格和o char 和o char 之外的任何零个或多个字符出现零次或两次出现 [^o\s]* - 除了o 和空格之外的零个或多个字符 (?!\S) - 右侧空白边界

【讨论】:

以上是关于Python 正则表达式匹配包含两个或更少 o 字符的空格分隔的单词的主要内容,如果未能解决你的问题,请参考以下文章

C++ 正则检测字串,提取数字以及字符

正则表达式怎么匹配空格

通过Python中的正则表达式优化在两个列表之间查找匹配子字符串

Python 匹配具有指定异常的正则表达式

python之正则表达式

一篇搞定Python正则表达式