Java正则表达式,替换除
我有一个字符串“u2x4m5x7”,我想用“”替换所有字符,但后面跟一个x的数字除外。 输出应为: “2x5x” 只是数字后面跟着x。 但我明白了: “2x45x7” 我正在这样做:Java正则表达式,替换除,java,regex,swing,Java,Regex,Swing,我有一个字符串“u2x4m5x7”,我想用“”替换所有字符,但后面跟一个x的数字除外。 输出应为: “2x5x” 只是数字后面跟着x。 但我明白了: “2x45x7” 我正在这样做: String string = "u2x4m5x7"; String s = string.replaceAll("[^0-9+x]",""); 请帮忙 这里是一个使用String#replaceAll的单行程序,有两个替换项: System.out.println(string.replaceAll("\\d
String string = "u2x4m5x7";
String s = string.replaceAll("[^0-9+x]","");
请帮忙 这里是一个使用
String#replaceAll
的单行程序,有两个替换项:
System.out.println(string.replaceAll("\\d+(?!x)", "").replaceAll("[^x\\d]", ""));
这是另一个可行的解决方案。我们可以使用带有模式\d+x
的正式模式匹配器来迭代输入字符串。这是白名单方法,试图匹配我们想要保留的变量组合
String input = "u2x4m5x7";
Pattern pattern = Pattern.compile("\\d+x");
Matcher m = pattern.matcher(input);
StringBuilder b = new StringBuilder();
while(m.find()) {
b.append(m.group(0));
}
System.out.println(b)
这张照片是:
2x5x
通过搜索以获取匹配项而不是替换所有非匹配项,这看起来要简单得多,但这里有一个可能的解决方案,尽管它可能缺少一些情况:
\d(?!x)|[^0-9x]|(?<!\d)x
\d(?!x)|[^0-9x]|(?
基本上它将:
\d(?!x)
--删除任何未后跟x的数字
[^0-9x]
——删除所有非x/数字字符
(?--删除前面没有数字的所有x
但是,再次强调,从\dx
抓取所需的$1
或替换为捕获的$1
(如果匹配,则为空)
或者a@HarshalParekh是的,可以使用String#replaceAll
来完成。但是请记住,replaceAll
在引擎盖下使用了一个模式匹配器,所以我的答案的第二部分没有看起来那么难看。这一部分是:D,非常感谢!!你们太棒了!。
String s = string.replaceAll("(\\d+x)|.", "$1");