Java正则表达式,替换除

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

我有一个字符串“u2x4m5x7”,我想用“”替换所有字符,但后面跟一个x的数字除外。 输出应为: “2x5x” 只是数字后面跟着x。 但我明白了: “2x45x7”

我正在这样做:

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");