繁体   English   中英

正则表达式查找完全匹配

[英]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'''模式。

为什么不

message: (['"])?ON(?(1)\1)

请参阅regex101.com 上的演示

如果您只想匹配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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM