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

时间:2018-01-12 14:17:12

标签: regex xml

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

this >word1 is a special ;word2 with ;word3

到目前为止,我有这个正则表达式,但它只是选择所有三个单词

(;[a-z0-9]+)

我想要的只是接收word2和word3,因为word1的分号属于XML实体。

2 个答案:

答案 0 :(得分:1)

你试过这个吗?

(?<!&[^ ]+)(;[a-z0-9]+)

它是&#34;硬编码的&#34;,但如果分号前面没有以&amp;开头的字符串,它只会在分号后得到单词。

编辑:如果由于使用可变长度lookbehind这种方法不起作用,请将其替换为

(?<!&[^ ]\w{1,20})(;[a-z0-9]+)
对于所述lookbehind

的解决方法,它确实有效

答案 1 :(得分:0)

我说:

(?:&[^ ]+?;)|;(\w+)

您只需检查组1是否存在。

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

如果您只想替换单词+分号,可以使用([^ ]+?;)|;\w+并替换为第一组。