python - python中的正则表达式匹配包含'z'的单词,而不是单词的开头或结尾
问题描述
考虑一个句子,其中包含一些可能以“z”开头或结尾的单词。
这是我的代码:
reg_9 = re.compile(r'\b[^z]\w+z\w+[^z]\b')
sentence = "this sentence contains zatstart azb pole ab noaz yeszishere z_is_op"
reg_9.findall(sentence)
所以根据上面的正则表达式边界'\ b'内的所有字符串,它不以'z'开头并且不以'z'结尾(在开始和结束处的[^z])但在其之间的某处有'z'在我的正则表达式中由 '\w+z\w+' 给出。
在输出中我得到这个:
[' azb ', ' yeszishere ']
那么有人能说出为什么这个输出字符串在 start 和 end 包含那些额外的空格吗?
解决方案
您需要将其设为\w+
可选,即\w*
改为使用。但是,我会将您的正则表达式表述为:
reg_9 = re.compile(r'\b[^\WzZ]\w*z\w*[^\WzZ]\b')
sentence = "this sentence contains zatstart azb pole ab noaz yeszishere z_is_op"
print(reg_9.findall(sentence)) # ['azb', 'yeszishere']
这个正则表达式模式说:
\b match a word boundary
[^\WzZ] match any word character OTHER than z or Z
\w* zero or more word characters
z z
\w* zero or more word characters
[^\WzZ] match any word character OTHER than z or Z
\b match a word boundary
推荐阅读
- python - 无法正确将数组转换为图像
- dockerfile - 使用具有多阶段构建的 Dockerfile 为每个构建参数命名一个阶段
- c++ - 指针和 c 样式数组变量的专用模板
- php - 如何在 Laravel 5.7 中上传数据库中的图像?
- file-pointer - 使用 cat 命令,为什么会这样打印结果?
- android - 自定义视图和 defStyleAttr
- c# - 追逐 AI 的 Raycast 问题
- android - (已解决)检查 sqlite 条目的功能不起作用
- spring-boot - 通过 IntelliJ 运行 Spring Boot Application.main() 找不到我的本地配置文件
- amazon-cloudwatch - 入口点的 ECS 计划任务容器覆盖不起作用