我想做下一个替换:
WORD1234 -> W1234
所以,我正在使用正则表达式:
([^d]*)([0-9]+)([^d]*)
替换:W$2
如果单词WORD1234AAAAA,使用以前的正则表达式我得到相同的结果:W1234,这就是我想要的。
但如果这个词是WO12RD34
我得到的结果是:W12W34
在所有情况下,我基本上想要的是删除所有非数字字符并在开头添加字母 W。
更新:
输入字符串并不总是以W
开头。例如,它可以是ABC12DE34
,所需的结果是:FA1234
。意思是,删除所有非数字字符并在开头添加一个单词。
试试这个:
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
使用此正则表达式,"start"捕获组仅在匹配第一个字符时设置。否则,它将为空。
这个想法是,当字符串的开头后跟 W 匹配时,命名的"start"模式将被初始化为 ^W。然后,只需将 ^W 替换为自身即可。
否则,当匹配任何非数字字符时,将不会设置起始模式(并且为空(。然后,还将非数字字符替换为任何内容。