用一个单词替换所有非数字字符

时间:2018-09-19 07:21:35

标签: java regex

我要进行下一个替换:

WORD1234-> W1234

所以,我正在使用正则表达式:

([^\d]*)([0-9]+)([^\d]*)

替换:W$2

如果单词是WORD1234AAAAA,则使用以前的正则表达式,我将得到相同的结果:W1234,这就是我想要的。

但是如果单词是WO12RD34,我得到的结果是:W12W34

我基本上希望在所有情况下都删除所有非数字字符,并在开头添加字母W。

更新:

输入字符串并不总是以W开头。例如,可以为ABC12DE34,期望的结果为:FA1234。意思是,删除所有非数字字符并在开头添加一个单词。

1 个答案:

答案 0 :(得分:0)

尝试一下:

String regex = "(?<start>^W)|(\\D)";
String replacement = "${start}";

System.out.println("WO12RD34".replaceAll(regex, replacement)); //prints W1234
System.out.println("WORD1234AAAAA".replaceAll(regex, replacement)); //prints W1234

使用此正则表达式,仅在匹配第一个字符时才设置“开始”捕获组。否则,它将为空。

这个想法是,当匹配字符串后跟W的开头时,命名的“开始”模式将被初始化为^ W。然后,只需将^ W替换为其自身。

否则,当匹配任何非数字字符时,将不会设置开始模式(并且为空)。然后,也将非数字字符替换为空。