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



我有这个字符串,需要获取单词2和单词3,但不需要单词1

this >word1 is a special ;word2 with ;word3

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

(;[a-z0-9]+)

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

你试过这个吗

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

它有点"硬编码",但如果分号前面没有以 & 开头的字符串,它只会在分号后面获得单词。

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

(?<!&[^ ]w{1,20})(;[a-z0-9]+)

它有效地执行了相同的操作,并具有所述回溯的解决方法

我会说:

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

你只需要检查组1是否存在。

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

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

最新更新