如何使用正则表达式查找非匹配计数

时间:2014-03-09 20:06:42

标签: regex text notepad++

我在结构中的xml文件中有标识符:

<compoundIdentifier>XXX-YYY-ZZZ</compoundIdentifier>
<compoundIdentifier>AAA BB-YYY-ZZZ</compoundIdentifier>

在Notepad ++中使用RegEx我试图识别错误的键(结构不同于[string] - [string] - [string])

字符串可以是包含空格的任何字符串,其中-转义为\- 所以这也是有效的:

<compoundIdentifier>some key-yet another key-key with \- in it</compoundIdentifier>

如何找到与此模式不匹配的标识符?

例如:

<compoundIdentifier>YYY-ZZZ</compoundIdentifier>
<compoundIdentifier>XXX</compoundIdentifier>
<compoundIdentifier>XXX--</compoundIdentifier>

2 个答案:

答案 0 :(得分:1)

如果你的xml就这么简单,你可以使用这样的东西:

^<compoundIdentifier>(?!(?:(?:[^-\\]|\\.)+-){2}(?:[^-\\]|\\.)+</compoundIdentifier>$).+</compoundIdentifier>$

regex101 demo

^匹配该行的开头。

(?!(?:(?:[^-\\]|\\.)+-){2}(?:[^-\\]|\\.)+)是一个负面的预测,以防止您不想匹配的特定结构的匹配。

[^-]+匹配一个或多个非-个字符。

(?:(?:[^-\\]|\\.)+-){2}匹配两组非破折号字符,后跟破折号。

.+</compoundIdentifier>$匹配任何留在同一行的结束标记之前的字符串。

答案 1 :(得分:1)

试试这个 -

>((?!([^-]+-){2}[^-]+).+)<

这也将捕获<>,但第一个捕获组将拥有它的内容 演示here