Java - Regex Replace All 不会替换匹配的文本

Java - Regex Replace All will not replace matched text

尝试从字符串中删除大量 unicode,但在 java 中遇到正则表达式问题。

示例文本:

\u2605 StatTrak\u2122 Shadow Daggers

示例期望结果:

StatTrak Shadow Daggers

我当前的正则表达式代码不起作用:

list.replaceAll("\\u[0-9]+","");

代码将执行但文本不会被替换。从其他解决方案来看,人们似乎只使用两个“\\”,但任何少于 4 的东西都会给我带来典型的错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal Unicode escape sequence near index 2 \u[0-9]+

我已经在 RegexPlanet and FreeFormatter 等在线测试环境中尝试了当前的正则表达式解决方案,并且都给出了正确的结果。

如有任何帮助,我们将不胜感激。

假设您想将 "special string" 替换为空字符串。如我所见,\u2605\u2122POSIX 字符 class。这就是为什么我们可以尝试将这些可打印字符替换为“”。然后,结果与您的预期相同。

示例为:

list = list.replaceAll("\P{Print}", "");

希望对您有所帮助。

在 Java 中,像您的 \u2605 这样的东西不是六个字符的文字序列,它代表单个 unicode 字符 — 因此您的模式 "\\u[0-9]{4}" 将不匹配它。

您的模式描述了一个字面字符 \ 后跟字符 u 紧接着四个数字字符 09 但字符串中的内容是来自 unicode 代码点 2605 的单个字符,"Black Star" 字符。

这与其他转义序列一样:在字符串 "some\tmore" 中没有字符 \ 也没有字符 t ... 只有单个字符 0x09 ,一个 制表符 — 因为它是 Java(和其他语言)已知的转义序列,所以它被它 表示的字符替换 和文字 \ t 不再是字符串中的字符。

Kenny Tai Huynh 的回答,替换不可打印的内容,可能是最简单的方法,具体取决于您要删除的内容类型,或者您可以列出您想要的字符(如果这是一个非常有限的集合)并删除它们的补充,例如 mystring.replaceAll("[^A-Za-z0-9]", "");

我是个白痴。我在字符串上调用了 replaceAll 但没有分配它,因为我认为它无论如何都改变了字符串。

我以前的:

list.replaceAll("\\u[0-9]+","");

我需要的:

list = list.replaceAll("\\u[0-9]+","");

结果现在工作正常,感谢您的帮助。