我有这个字符串,需要获取单词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+
并替换为第一组。