java正则表达式用否定的组替换所有
我正在尝试将java正则表达式用否定的组替换所有,java,regex,regex-negation,Java,Regex,Regex Negation,我正在尝试将String.replaceAll()方法与regex一起使用,以仅保留字母字符和['-\]。我试着用一个空字符串替换每个既不是字母也不是上述字符的字符 到目前为止,我已经尝试过这样的方法(在不同的变体中),它正确地保留字母,但替换了我想要保留的特殊字符: current = current.replaceAll("(?=\\P{L})(?=[^\\'-_])", ""); 您不需要向前看,只需使用否定正则表达式: current = current.replaceAll("[^\
String.replaceAll()
方法与regex一起使用,以仅保留字母字符和['-\]
。我试着用一个空字符串替换每个既不是字母也不是上述字符的字符
到目前为止,我已经尝试过这样的方法(在不同的变体中),它正确地保留字母,但替换了我想要保留的特殊字符:
current = current.replaceAll("(?=\\P{L})(?=[^\\'-_])", "");
您不需要向前看,只需使用否定正则表达式:
current = current.replaceAll("[^\\p{L}'_-]+", "");
[^\\p{L}'.-]
将匹配任何非字母(unicode)、单引号、下划线或连字符的内容。您的正则表达式太复杂。只需指定要保留的字符,并使用^
进行求反,因此[^a-z'.-]
表示“除此之外的任何内容”
让它更简单:
current = current.replaceAll("[^a-zA-Z'_-]", "");
说明:
将a
中的任何字符匹配到z
,a
到z
,
,-
,-
和replaceAll()
方法将用零替换任何匹配的字符
测试输入:“a\u zE'R-z4r@m“
输出:a_zE'R-zrm
您可以尝试以下方法:
String str = "Se@rbi323a`and_Eur$ope@-t42he-[A%merica]";
str = str.replaceAll("[\\d+\\p{Punct}&&[^-'_\\[\\]]]+", "");
System.out.println("str = " + str);
结果是:
str = Serbia'and_Europe-the-[America]
请注意,在方括号中,
'-
表示“介于'
和
之间的任何字符”,这可能不是您想要的。您应该转义-
或将其放在]
之前的最后一个位置。
str = Serbia'and_Europe-the-[America]