【问题标题】:Regex to match string if NOT only string on line正则表达式匹配字符串,如果不仅仅是在线字符串
【发布时间】:2017-04-16 19:31:48
【问题描述】:

如果它不是一行中唯一的字符串,我想匹配 nvalue。

nvalue : should not match
This nvalue : should match
Nvalue example : should match

如果它是唯一的字符串,我知道匹配 nvalue 的正则表达式:

^\bnvalue\b$

但我不知道如何扭转它。

【问题讨论】:

  • 只是一个备注:要匹配 nvalue 如果它是完整的字符串,你不需要像你的例子中的 \b^nvalue$ 足够简单了。

标签: regex


【解决方案1】:

使用消极的向后看:

 ^(?!nvalue$).*nvalue

这里的^(?!nvalue$) 表示仅匹配字符串的开头,紧随其后的是nvalue 和字符串结尾$

演示:https://regex101.com/r/1vOhQt/1

更新

如果您只需要提取nvalue,请使用括号将其包装到捕获组中:

^(?!nvalue$).*(nvalue)

结果将存储在第一个匹配组中。演示:https://regex101.com/r/1vOhQt/3.

如果您使用的是 PCRE 风格,请使用 \K 重置任何以前匹配的子模式:

^(?!nvalue$).*\Knvalue

演示:https://regex101.com/r/1vOhQt/2

在 Python 中,\Ksupported in regex module

【讨论】:

  • 谢谢。我在演示中注意到“This”也包含在比赛中。我怎样才能摆脱它?对不起,如果这是一个愚蠢的问题,但我是正则表达式的新手。
  • @Hermie:请查看更新。根据您的正则表达式风格,可能还有其他选项。什么味道?
  • 风格是 Python。再次感谢!
  • 好的,包括字边界:^(?!nvalue$).*(\bnvalue\b) 演示:regex101.com/r/1vOhQt/4
【解决方案2】:

您可以使用 ma​​tch-group 和运算符 | 作为替代来匹配这两种可能性:

((\w+ nvalue)|(nvalue \w+))

它适用于所有正则表达式搜索引擎

带有标志g:全局
............. i : 区分大小写
.............m : 多行

或:

((\w+ [Na]value)|([Na]value \w+))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多