我有两个字符串
<EM>is <i>love</i></EM>,<PARTITION />
和
<EM>is <i>love</i>,<PARTITION />
我希望正则表达式完全匹配第二个字符串,但不应与第一个字符串匹配。请帮忙。
注意:除EM和PARTITION标签外,一切都可以改变。
答案 0 :(得分:1)
如果要完全匹配字符串(如果它不包含某个子字符串),请使用正则表达式匹配子字符串,如果正则表达式不匹配则返回整个字符串。你没有说你正在使用哪种语言,但你用.NET标记了你的问题,所以这里用C#:
if (Regex.IsMatch(subjectString, "</EM>")) {
return null;
} else {
return subjectString;
}
由于只是一些文字文本,您甚至不需要使用正则表达式:
if (subjectString.Contains("</EM>")) {
return null;
} else {
return subjectString;
}
在所有你可以使用的是正则表达式的情况下,试试这个:
\A((?!</EM>).)*\Z
仅使用正则表达式的解决方案的效率远低于上述代码示例。
答案 1 :(得分:0)
我认为你没有问正确的问题。此正则表达式完全匹配第二个字符串而不是第一个字符串:
/^<EM>is <i>love<\/i>,<PARTITION \/>$/
但显然,你想要匹配一类字符串,而不仅仅是第二个字符串......对吗?定义您想要匹配的字符串类,您可以更接近获得所需的正则表达式。
答案 2 :(得分:0)
^<EM>(?:(?<!</EM>).)*<PARTITION />$
的工作原理。但它取决于目标语言,例如,JavaScript不支持环绕声断言......
更简单的解决方案是使用^<EM>.*<PARTITION />$
,然后检查字符串中是否有</EM>
:我相信RE是强大的,必须有,但我不会尝试做任何事情只有一个表达式......: - )
答案 3 :(得分:0)
幸运地经历了这一切并对此进行了大量研究我找到了正确的regexx .......... heres为你们所有人...感谢所有帮助过的人
<EM>\w*\s*\W*\S*[^\(</EM>)]<PARTITION[ ]/>
捕获第二个字符串但是留下第一个字符串....我唯一的问题是否定了</EM>
组合,我在组之前用反斜杠做了,这否定了完整的字符串而不是取人物分开......