首页 > 解决方案 > 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 包含那些额外的空格吗?

标签: pythonregex

解决方案


您需要将其设为\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

推荐阅读