Regex 正则表达式:如果分号不',则查找分号后的第一个单词;不属于XML实体

Regex 正则表达式:如果分号不',则查找分号后的第一个单词;不属于XML实体,regex,xml,Regex,Xml,我有这个字符串,需要得到word2和word3,但不是word1 this &gt;word1 is a special ;word2 with ;word3 到目前为止,我有这个正则表达式,但它只是选择了所有三个单词 (;[a-z0-9]+) 我只想接收word2和word3,因为word1的分号属于XML实体。您尝试过这个吗 (?<!&[^ ]+)(;[a-z0-9]+) (? 它有点“硬编码”,但是如果分号前面没有以&开头的字符串,它只会在分号之后得到单词 编辑

我有这个字符串,需要得到word2和word3,但不是word1

this &gt;word1 is a special ;word2 with ;word3
到目前为止,我有这个正则表达式,但它只是选择了所有三个单词

(;[a-z0-9]+)
我只想接收word2和word3,因为word1的分号属于XML实体。

您尝试过这个吗

(?<!&[^ ]+)(;[a-z0-9]+)
(?
它有点“硬编码”,但是如果分号前面没有以&开头的字符串,它只会在分号之后得到单词

编辑:如果此方法由于使用可变长度查找而不起作用,请将其替换为

(?<!&[^ ]\w{1,20})(;[a-z0-9]+)
(?
它有效地解决了上述查找的问题

我想说:

您只需检查组
1
是否存在

或者,根据使用正则表达式的语言,您也可以在任何实体上拆分(
&[^\s;]+;
),然后在每个块中查找单词


如果只想替换单词+分号,可以使用并替换为第一组。

有史以来最糟糕的标记组合。整个标记组合是否在XML元素中?闻起来好像没有指定语言,我假设任何语言都是可能的?因此可变宽度lookbehinds(.net允许这种情况)可以使用:如果您正在使用,您可以使用
html\u entity\u decode()
,然后只需使用
(?
&DoubleDot;
&NonBreakingSpace;
&DiacriticalGrave;
&DiacriticalAcute;
&CenterDot;
&circledR;
,等等。我明白了,谢谢。您可以增加正在搜索的字符串的大小,但我想这可能会导致错误的答案lly.无论如何我都会编辑我的答案,所以,这使用了一个可变长度的lookbehind,它没有太多的支持。只支持,目前也支持。Java也支持,但不支持
*
+
,只
{x,y}
在lookback中。由于问题的这一部分没有任何限制,我也没有考虑到这一点。你可以用
{1,20}
替换
+
,但这变得很漂亮(w)hacky@ricardosilva:在Java和co中,这是一种常见的方法。您经常可以看到类似
(?我试过了,但它选择了单词2和单词3,但在完全匹配中包括part,是的,但不在第1组中。