[英]Is there a way to find exact match and not substring match using regex in python?
[英]Regex to find exact match
我有以下场景:
message: ON
message: "ON"
message: 'ON'
message: "TONC"
message: Los Angeles, ON
message: HOLDS ON FILE
我想在前三个场景中匹配 ON 这个词,而不是其他场景。
我尝试了积极/消极的前瞻/落后无济于事。 前任:
\bON\b(?=[\s{0,1}\"{0,1}\'{0,1}]$)
我建议修改字符串以消除您不想要的东西,而不是尝试直接匹配。 在这里,我只是删除非字母字符并与所需的结果进行比较:
#!/usr/bin/env python3
import re
tests = ['message: ON',
'message: "ON"',
'message: \'ON\'',
'message: "TONC"',
'message: Los Angeles, ON',
'message: HOLDS ON FILE']
for test in tests:
test = re.sub(r'\W+', '', test)
print(test)
print(test == "messageON")
您可以使用
r'''(?<=:\s)(["']?)\bON\b\1'''
请参阅正则表达式演示。 如有必要,在模式末尾添加$
以使其与字符串末尾匹配。
细节
(?<=:\s)
- 与紧接在:
和空白字符前面的位置匹配的正向后视(["']?)
- 第 1 组:可选的"
或'
字符\bON\b
- 整个字ON
\1
- 对第 1 组值的反向引用,可以是"
或'
。 注意:如果:
和ON
字之间可以有可变数量的空格,您可以使用PyPi正则表达式模块并使用r'''(?<=:\s*)(["']?)\bON\b\1'''
模式。
如果您只想匹配ON
,另一种选择是在冒号后跟空格和右侧的空白边界之间或在相同类型的引号之间使用交替匹配。
(?<=: )ON(?!\S)|(?<=: (['"]))ON(?=\1)
(?<=: )
断言:
和左边的空格ON
匹配ON
(?!\S)
在右边断言一个空白边界|
或者(?<=: (['"]))
断言:
和左边的空格并在第 1 组中捕获'
或"
ON
匹配ON
(?=\1)
使用反向引用在右侧断言与第 1 组匹配的相同引号我基本上只是在正则表达式中添加message:
( r'^message: ["\']?\bON\b["\']?$'
):
#!/usr/bin/env python3
from re import search
strings = [
'message: ON',
'message: "ON"',
'message: \'ON\'',
'message: "TONC"',
'message: Los Angeles, ON',
'message: HOLDS ON FILE',
]
for s in strings:
m = search(r'^message: ["\']?\bON\b["\']?$', s)
if m is not None:
print(s)
print("It's a match !")
它有效,这里是 output:
$ ./regex_to_find_exact_match.py message: ON It's a match ! message: "ON" It's a match ! message: 'ON' It's a match !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.