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
和 \u2122
是 POSIX
字符 class。这就是为什么我们可以尝试将这些可打印字符替换为“”。然后,结果与您的预期相同。
示例为:
list = list.replaceAll("\P{Print}", "");
希望对您有所帮助。
在 Java 中,像您的 \u2605
这样的东西不是六个字符的文字序列,它代表单个 unicode 字符 — 因此您的模式 "\\u[0-9]{4}"
将不匹配它。
您的模式描述了一个字面字符 \
后跟字符 u
紧接着四个数字字符 0
到 9
但字符串中的内容是来自 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]+","");
结果现在工作正常,感谢您的帮助。
尝试从字符串中删除大量 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
和 \u2122
是 POSIX
字符 class。这就是为什么我们可以尝试将这些可打印字符替换为“”。然后,结果与您的预期相同。
示例为:
list = list.replaceAll("\P{Print}", "");
希望对您有所帮助。
在 Java 中,像您的 \u2605
这样的东西不是六个字符的文字序列,它代表单个 unicode 字符 — 因此您的模式 "\\u[0-9]{4}"
将不匹配它。
您的模式描述了一个字面字符 \
后跟字符 u
紧接着四个数字字符 0
到 9
但字符串中的内容是来自 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]+","");
结果现在工作正常,感谢您的帮助。