用正则表达式捕获一个特殊字符

时间:2015-06-09 16:16:13

标签: regex xml

我有一个xml文件,我必须匹配char<和>在标签内部并替换它们,但我抓住它们有些困难......

xml链接了这个:

<tag>text</tag>
<tag2>3 is > than 2</tag2>
<tag3>But 1 in < than 4</tag3>

我找到了使用此正则表达式的解决方案

(\s>\s|\s<\s) 

包括空格,字符和另一个空格......但是如果没有空格呢?

修改实际上我需要将这些符号替换为&lt;&gt; ... xml字段是从第三方软件获得的,该软件提供了输出xml文件,就像我上面写的那样。

我知道最好的方法是当软件读取数据时,它会编码&lt;和&gt;在xml中为&lt;&gt;,但我希望之后有办法做到这一点

1 个答案:

答案 0 :(得分:0)

所以基本上你收到格式错误的XML并且想要替换<>并将其替换为&lt;&gt;

坏消息。使用XML通用方式的正则表达式是不可能的。尝试构建解析器。

好消息。如果您引入了一些限制(即,如果您收到的数据符合某些要求),可能会有一些好的解决方案。

您需要一种方法来区分哪些符号是标记的一部分,哪些符号是内容的一部分。

例如,如果您认为标签只有字母和数字,但中间没有空格(或其他符号),则

(?<lt><)(?:(?!\/?[[:alnum:]]*>))|(?:\s[[:alnum:]]*)(?<gt>>)

可能会奏效。您可以在https://regex101.com/r/uF0iR2/2

中使用它

这是两个查询的串联|。第一个是<,但未遵循,但标签的其余部分。第二个是>,但前缀是有空格的东西。我们可以避免否定前瞻?!,但随后我们可能最终与其他“查询”发生冲突。我们不能做负面的后顾,因为不能有量词。

最后,无关,(\s>\s|\s<\s)的另一种可能性是(\s[<>]\s)