【问题标题】:Regex replace all tags by one正则表达式将所有标签替换为一个
【发布时间】:2021-12-14 10:06:03
【问题描述】:

我一直在使用正则表达式,我想用一个替换我的 xml 中的多个标签。

<b>的每个标签的内容是动态的,可以包含另一个tags

所以有

   <a>
     <c>hi</c>
     <b>hello1</b>
     <b><f>bla</f></b>
     <b>hello3</b>
     <b>hello4</b>
   </a>

我想用我的一个标签&lt;b&gt;world&lt;/b&gt;替换所有&lt;b&gt;标签,并保留&lt;c&gt;

    <a>
     <c>hi</c>
     <b>world</b>
   </a>

知道怎么做吗?使用 XML Parser 会更好吗?

问候。

【问题讨论】:

  • 不要纠结于正则表达式,这不是正则表达式的工作。请参阅stackoverflow.com/questions/1732348/… 的经典帖子。对于这类工作,使用 XSLT 或 XQuery 会好得多。

标签: java regex xml java-8


【解决方案1】:

XSLT 解决方案:

<xsl:template match="/a">
  <a>
    <xsl:copy-of select="c"/>
    <b>world</b>
  </a>
</xsl:template>

【讨论】:

    【解决方案2】:

    使用 &lt;a&gt;.*&lt;\/a&gt; 模式和点所有选项(标志 s)并替换为 &lt;a&gt;&lt;b&gt;world&lt;/b&gt;&lt;/a&gt; 之类的东西

    或将&lt;b&gt;.*&lt;\/b&gt; 替换为&lt;b&gt;world&lt;/b&gt;

    见:https://regex101.com/r/fhdwbz/4

    【讨论】:

    • 谢谢,但它不包括我的用例。更改我的问题的修改。
    • 不清楚的请举更多例子
    • 我更新了问题,现在应该更清楚了。这个例子正是我想要实现的;)
    • 所以我的第二个例子完成了这项工作:regex101.com/r/fhdwbz/4
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多