仅将所有非数字字符替换为一个单词



我想做下一个替换:

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 替换为自身即可。

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

最新更新