gpt4 book ai didi

Java的replaceAll不替换字符串

转载 作者:行者123 更新时间:2023-12-01 21:19:14 24 4
gpt4 key购买 nike

我正在解析一些 XML 并清理一些字段。

我正在尝试在 Java 中执行以下操作:

nameField = nameField.replaceAll("[^a-zA-Z\\d\\s\\.,'&]", "");

不想想要替换任何字母、任何数字、任何空格、任何句号、任何逗号、任何单引号或(这是我的问题所在)文字字符串 &.

但我确实想替换出现的单个 & 或单个 ;

但显然我的正则表达式不起作用。它将保留在所有 & 和所有 ; 中。

例如,假设找到了 K&W@#9$9(AR;.0 O& 字符串),我的预期结果将是: KW99AR.0 O& .

我怎样才能实现这个目标?

最佳答案

为什么不简化正则表达式并使用前瞻/后瞻:

//                  |"&" not followed by "amp;"
// | | or
// | | ";" not preceded by "&amp"
nameField.replaceAll("&(?!amp;)|(?<!&amp);", "");

"K&W@#9$9(AR;.0 O&" 的输出为:

KW@#9$9(AR.0 O&amp;

编辑

然后,您可以通过清理来链接它,只留下您想要的字符。在这里,我将 ;& 添加到排除列表中,因为它们在上一个操作“独立”时已被清除。

此外,您不需要对自定义字符类中的点进行转义。

.replaceAll("[^a-zA-Z\\d\\s.,;&]", "");

两个链式调用将返回:

KW99AR.0 O&amp;

注释

  • Tushar所述,自定义字符类中的字符序列不被视为序列,而是替代单个字符。
  • 一般经验法则:谨慎使用正则表达式来解析标记。你很可能会陷入更大的困惑。正则表达式不是用来解析标记或具有语法的语言的。
  • 您的具体情况足够安全,但请记住还有其他 XML 实体,例如 >< 等。

关于Java的replaceAll不替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39412494/

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