regex 如何将一个单词与一个正则表达式精确匹配?[副本]

bbuxkriu  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(79)

此问题已在此处有答案

Regex whitespace word boundary(3个答案)
Regular expression: matching words between white space(1个答案)
12天前关闭
使用Python 3.9.13.
如何用一个简单的正则表达式匹配一个没有前导或尾随字符的精确单词?
有使用边界词\b的答案。然而,根据Python文档,它可以匹配非单词字符。
\b:匹配空字符串,但仅在单词的开头或结尾。单词被定义为单词字符的序列。请注意,形式上,\b定义为\w\W字符之间的边界(反之亦然),或者\w和字符串的开头/结尾之间的边界。
例如,我只想得到与单词cool匹配的结果,而不想得到与#coolcool.匹配的结果。

re.findall(
    pattern=r'\bcool\b', 
    string=" #cool", 
    flags=re.IGNORECASE|re.ASCII
)
---
['cool']

备选方案可以列出多个模式,但它不干净。

re.findall(
    pattern=r'\Acool\Z|\s+cool\s+|^cool\s+|\s+cool\Z', 
    string=" #cool", 
    flags=re.IGNORECASE|re.ASCII
)
---

请建议是否有更好和简单的一个regexp模式来实现这一点。

更新

回复:The fourth bird

re.findall(
    pattern=r'(?<!\S)cool(?!\S)', 
    string=" #cool cool& cool cool\n (cool)", 
    flags=re.IGNORECASE|re.ASCII
)
---
['cool', 'cool']

re.findall(
    pattern=r'(?<=\s|^)cool(?=\s|$)', 
    string=" #cool cool& cool cool\n (cool)", 
    flags=re.IGNORECASE|re.ASCII
)
---
['cool', 'cool']
pepwfjgg

pepwfjgg1#

像这样使用match函数和其他正则表达式模式

import re

pattern = re.compile(r"\Acool\Z")

print(pattern.findall("cool"))
print(pattern.match("cool"))

然后,如果你想在一个if语句中这样做:

if (pattern.match("cool") != None):
    print("cool Matched")

或基于您的问题:

import re

re.findall(
    pattern=r"\Acool\Z",
    string="cool",
    flags=re.IGNORECASE
)

相关问题