[英]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转义序列
我已经在RegexPlanet和FreeFormatter等在线测试环境中尝试了当前的regex解决方案,并且都给出了正确的结果。
任何帮助,将不胜感激。
假设您想将“特殊字符串”替换为空String。 如我所见, \★
和\™
是POSIX
字符类。 因此,我们可以尝试将这些可打印字符替换为“”。 然后,结果与您的期望相同。
示例为:
list = list.replaceAll("\\P{Print}", "");
希望能有所帮助。
在Java中,类似\★
的字符序列不是六个字符,它表示一个unicode字符-因此,模式"\\\\\\\\u[0-9]{4}"
将与之不匹配。
您的模式描述了一个文字字符\\
后跟字符u
后跟正好是四个数字字符0
到9
但是字符串中的字符是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.