我需要用""
替换所有不遵循模式的字符。
我有如下字符串:
MCC-QX-1081
TEF-CO-QX-4949
SPARE-QX-4500
到目前为止,我正在使用以下正则表达式。
String regex = "[^QX,-,\\d]";
使用replaceAll
字符串方法,我得到QX1081
,预期结果为QX-1081
答案 0 :(得分:0)
您使用的character class匹配单个字符,而不是模式。
您想要类似的东西
String resultString = subjectString.replaceAll("^.*?(QX-\\d+)?$", "$1");
只要字符串中的QX-digits
部分没有任何内容,它就可以工作。
答案 1 :(得分:0)
将破折号放在正则表达式的末尾:[^ QX,\ d-] 接下来,您只需要子字符串即可过滤掉第一个破折号。 不完全知道对所有字符串的期望,但是如果要匹配字符类中的破折号,则必须将其设置为最后一个字符。
答案 2 :(得分:0)
您正在使用一个字符类,在该字符类中,您必须转义连字符或像store.js
那样将其放在开头或结尾,否则您要匹配从逗号到逗号的范围。但是更改它会给您[^QX,\d-]
,这不是理想的结果。
您可以匹配您的模式,然后替换为第一个捕获组-QX-1081
:
$1
在Java中,您必须对与数字^(?:[A-Z]+-)+(QX-\d+)$
匹配的数字进行两次转义
这将匹配:
\\d
字符串的开头^
重复1次以上一个或多个大写字符,再加上连字符(?:[A-Z]+-)+
捕获成组(QX-\d+)
,后跟1个以上数字QX-
字符串的结尾例如:
$
请参见Regex demo | Java demo
请注意,如果仅执行一次替换,则也可以使用String result = "MCC-QX-1081".replaceAll("^(?:[A-Z]+-)+(QX-\\d+)$", "$1");
System.out.println(result); // QX-1081