有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java仅用一个字替换所有非数字字符

我想做下一个替换:

WORD1234->;W1234

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

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

替换:W$2

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

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

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

更新:

输入字符串并不总是以^{开头。例如,它可以是ABC12DE34,期望的结果是:FA1234。也就是说,删除所有非数字字符,并在开头添加一个单词


共 (1) 个答案

  1. # 1 楼答案

    试试这个:

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

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