【问题标题】:Replace all tags except one with RegExp in Java用Java中的RegEx替换除一个之外的所有标签
【发布时间】:2017-05-14 02:20:03
【问题描述】:

我遇到了以下问题。我想删除所有子字符串,其中<开始,>结束,除了子字符串<back>

例如:<apps> <up> <down> <capital> ... 应该被删除,而不是<back>

我确信这适用于 RegExpString.replace(),但我不知道如何。

目前,我已经想通了:

line = line.replaceAll("<[^<]*>", "");

问题是,这也删除了 &lt;back&gt;-substring!

我希望你们当中有人知道解决方案。

感谢您的帮助!

【问题讨论】:

    标签: java regex replace


    【解决方案1】:

    使用负前瞻:

    line = line.replaceAll("<(?!back>)[^<>]*>", "");
                             ^^^^^^^^^
    

    请参阅regex demo

    模式匹配:

    • &lt; - &lt; 符号
    • (?!back&gt;) - 后面不跟back&gt;(这个否定的前瞻,是一个零宽度断言,只检查当前位置右侧的文本,但不消耗文本)
    • [^&lt;&gt;]* - 除了&gt;&lt; 之外的零个或多个字符
    • &gt; - &gt; 符号。

    【讨论】:

    • 此解决方案删除了​​哪些字符?我更新为仅从 &lt; 到最接近的 &lt; 匹配,不包括 &lt;&gt;
    【解决方案2】:

    你可以使用(?!&lt;back&gt;)&lt;[^&lt;]*&gt;line = line.replaceAll("(?!&lt;back&gt;)&lt;[^&lt;]*&gt;", "");

    (?!&lt;back&gt;)(否定前瞻)不匹配标签&lt;back&gt;

    RegEx Demo

    【讨论】:

    • (?!&lt;back)&lt;[^&lt;]*&gt; 解决方案将不匹配那些具有单词 back 开头的类似&lt;...&gt; 的字符串
    • @WiktorStribiżew 谢谢,我已经改进了它,只是写了描述,让我点击显示
    • 谢谢大家的快速回答,这个效果更好,第一个删除了一些其他字符。 RegExp-Demo 真的很有帮助!
    • @MichaelGierer 很高兴我和 Wiktor Stribiżew 可以提供帮助,编码愉快
    • 这个解决方案包含多余的部分,可以进一步缩短。
    猜你喜欢
    • 2013-12-26
    • 2016-04-05
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 2023-03-30
    相关资源
    最近更新 更多