我要进行下一个替换:
WORD1234-> W1234
所以,我正在使用正则表达式:
([^\d]*)([0-9]+)([^\d]*)
替换:W$2
如果单词是WORD1234AAAAA,则使用以前的正则表达式,我将得到相同的结果:W1234,这就是我想要的。
但是如果单词是WO12RD34
,我得到的结果是:W12W34
我基本上希望在所有情况下都删除所有非数字字符,并在开头添加字母W。
输入字符串并不总是以W
开头。例如,可以为ABC12DE34
,期望的结果为:FA1234
。意思是,删除所有非数字字符并在开头添加一个单词。
答案 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替换为其自身。
否则,当匹配任何非数字字符时,将不会设置开始模式(并且为空)。然后,也将非数字字符替换为空。