gpt4 book ai didi

java - 替换 ![CDATA[xxx]] 中所有匹配 [.*] 的内容,而不替换 CDATA

转载 作者:行者123 更新时间:2023-12-02 12:10:23 26 4
gpt4 key购买 nike

我正在尝试删除字符串中的所有 [.*],但不删除 ![CDATA[xxx]]。我期待以下结果

"""![CDATA[please remove[macro]]]"""
.replaceAll("""(?<!CDATA)\[(?!CDATA).*\]""", "")

应该是

![CDATA[请删除]]

但是结果是

![CDATA[请删除

最佳答案

正如我已经说过的,XML 不太适合正则表达式,但如果您的输入总是看起来像 ![CDATA[something [macro] something ... ]] ,即宏不包含空格(在大多数情况下无论如何都没有意义)并且没有其他可能看起来像宏的字符串,您可以执行以下操作:

String replaced = "![CDATA[please remove[macro]]]".replaceAll("(?<!CDATA)\\[\\w+\\]", "" );

表达式 (?<!CDATA)\[\w+\] 的详分割析:

  • (?<!CDATA)是负向后查找,即匹配项不能直接位于 CDATA 之前。是为了防止没有宏的 CDATA 元素匹配)
  • \[\w+\]匹配任何由方括号括起来的单词字符序列( \w 相当于 [a-zA-Z0-9_] ),例如它会匹配 [please_remove]不是[please remove] .

使用该表达式,您将在 ![CDATA[ somthing [macro] somthing [another_macro]]] ... [macro_outside] ... [not a macro] ... ![CDATA[empty]] 上获得以下匹配项:

  • [macro]
  • [another_macro]
  • [macro_outside]

但是让我再次重申:只有当您知道输入字符串是什么样子时,这才有效,或者不关心当它们不符合您的要求时它是否不起作用(如果您接受任何输入,则有对于某些与您想要的不匹配的情况 - 因为 XML 是一种不规则语言)。

关于java - 替换 ![CDATA[xxx]] 中所有匹配 [.*] 的内容,而不替换 CDATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46589830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com