用XML替换文本而忽略粗体和斜体标记

时间:2013-01-27 07:51:31

标签: python xml regex xml-parsing

  

可能重复:
  RegEx match open tags except XHTML self-contained tags

我有一个任意的XML字符串,它也有<b>, <i>标签,具有通常的含义。 我只需要在纯文本中执行字符串替换。节点定义中的任何内容都不应被替换。

例如,我想用*替换“hello”。 像<hello a="hello">text sayh<b>ell</b>o more text</hello>这样的XML应该成为<hello a="hello">text say* more text</hello>

最好的方法是什么? 我只会使用regex,但这个问题被否决了。

1 个答案:

答案 0 :(得分:0)

一个非常快速和肮脏(强调脏)的解决方案,简单地实现规则“仅当下一个尖括号不是一个闭合角括号时才匹配”将是

hello(?![^<>]*>)

这可能适用于您的XML文件,但它可能会以各种方式在有效的XML上失败(甚至在无效的XML上也会失败)。

修改

由于我原来的回答,问题已经发生了很大变化,所以答案不再正确。如果你想忽略粗体/斜体标签,你首先必须完全删除它们,搜索</?[bi]>并用空字符串替换所有标签,然后运行上面的正则表达式(但这将删除 all < / em>这些标记,不仅仅是hello中的标记,还是使用

</?[bi]>h</?[bi]>e</?[bi]>l</?[bi]>l</?[bi]>o</?[bi]>(?![^<>]*>)

而不是上面的正则表达式。到目前为止,我认为你可以看到正则表达式不是这类任务的可靠工具。但是,评论中应该已经清楚了。