繁体   English   中英

Java-Regex全部替换不会替换匹配的文本

[英]Java - Regex Replace All will not replace matched text

尝试从字符串中删除很多unicode,但是Java中的正则表达式出现问题。

示例文字:

\\ u2605 StatTrak \\ u2122暗影匕首

所需结果示例:

StatTrak暗影匕首

我拥有的当前正则表达式代码将无法正常工作:

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

该代码将执行,但文本不会被替换。 通过查看其他解决方案,人们似乎只使用了两个“ \\\\”,但是小于4的值则抛出了典型错误:

线程“主”中的异常java.util.regex.PatternSyntaxException:索引2 \\ u [0-9] +附近的非法Unicode转义序列

我已经在RegexPlanetFreeFormatter等在线测试环境中尝试了当前的regex解决方案,并且都给出了正确的结果。

任何帮助,将不胜感激。

假设您想将“特殊字符串”替换为空String。 如我所见, \★\™POSIX字符类。 因此,我们可以尝试将这些可打印字符替换为“”。 然后,结果与您的期望相同。

示例为:

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

希望能有所帮助。

在Java中,类似\★的字符序列不是六个字符,它表示一个unicode字符-因此,模式"\\\\\\\\u[0-9]{4}"将与之不匹配。

您的模式描述了一个文字字符\\后跟字符u后跟正好是四个数字字符09但是字符串中的字符是Unicode代码点2605中的单个字符 ,即“黑星”字符。

就像其他转义序列一样:在字符串"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]+","");

现在效果很好,谢谢您的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM