java使用replaceall()删除任何与模式不匹配的字符串
我需要用""
替换所有不遵循模式的字符
我有这样的字符串:
MCC-QX-1081
TEF-CO-QX-4949
SPARE-QX-4500
到目前为止,我正在使用下面的正则表达式
String regex = "[^QX,-,\\d]";
使用replaceAll
String方法,我得到QX1081
,预期结果是QX-1081
你可以在下面搜索框中键入要查询的问题!
我需要用""
替换所有不遵循模式的字符
我有这样的字符串:
MCC-QX-1081
TEF-CO-QX-4949
SPARE-QX-4500
到目前为止,我正在使用下面的正则表达式
String regex = "[^QX,-,\\d]";
使用replaceAll
String方法,我得到QX1081
,预期结果是QX-1081
# 1 楼答案
您使用的字符类要么转义连字符,要么将其放在开头或结尾,比如
[^QX,\d-]
,否则您将匹配从逗号到逗号的范围。但是改变这一点会给你带来-QX-1081
,这并不是你想要的结果您可以匹配您的模式,然后替换为第一个捕获组^{:
在Java中,必须对匹配的数字进行双转义
\\d
这将匹配:
^
字符串的开头(?:[A-Z]+-)+
重复1+次一个或多个大写字符,后跟连字符(QX-\d+)
在组中捕获QX-
后跟1+个数字$
字符串的结尾例如:
见Regex demo| Java demo
请注意,如果只进行一次替换,也可以使用
replaceFirst
# 2 楼答案
将破折号放在正则表达式的末尾:[^QX,\d-] 接下来,只需使用子字符串过滤掉第一个破折号。 不知道所有字符串的确切期望值,但如果要匹配字符类中的破折号,则必须将其设置为最后一个字符
# 3 楼答案
您使用的character class匹配单个字符,而不是模式
你想要什么
只要字符串中的
QX-digits
部分后面没有任何内容,它就可以工作