【问题标题】:Invert match in regex在正则表达式中反转匹配
【发布时间】:2015-12-02 17:23:36
【问题描述】:

有没有办法(或可能)使用正则表达式反转匹配模式(不是预先给定的词)?

例如

输入字符串:

a:b, c:d, a:b1,s:sad

模式是

a:[^,]+,?

此模式匹配字符串中的“a:b”和“a:b1”。我可以在不使用 grep -v -e 的情况下替换/反转匹配剩余部分,即“c:d”和“s:sad”吗?

例如继续,演示输出将剩余部分替换为“[TAG]”:

a:b,[TAG], a:b1,[TAG]

[^pattern] 或 (?!pattern) 技巧失败,此处不允许使用带有 -e -v 选项的 grep。

谢谢!

【问题讨论】:

标签: regex


【解决方案1】:

表达式

/((a:[^,]+,?\s?)(((?!a:[^,]+).)+(,|$))+)/\2[TAG]\5/g

将替换

a:b, c:d, a:b1,s:sad

a:b, [TAG], a:b1,[TAG]

但我不确定我是否理解您关于 (?!pattern) 不起作用的评论。我正在https://regex101.com/ 进行测试。

【讨论】:

  • 谢谢!我将模式直接放入(?!)并且它不起作用。看来我需要更仔细地对模式进行分组。
【解决方案2】:
[^,:]+(?<!\ba):[^,]+,?

您可以简单地将其与grep -P 一起使用。参见演示。

https://regex101.com/r/hE4jH0/25

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 2010-10-31
    • 2020-07-02
    • 2011-06-07
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多