正则表达式替换前3个数字后的所有数字

时间:2012-12-28 15:32:34

标签: java regex

我正在使用java正则表达式引擎,需要一种方法来删除字符串中前3位后的所有数字。我已经尝试了积极的看法,但是没有用。

这是我拥有的数据类型

213-333-4444

233.444.5556

(636) 434-5555

这是我想要达到的结果:

213-222-2222

233.222.2222

(636) 222-2222

所以正则表达式会查找前3位数字,然后用2s替换所有数字字符。

4 个答案:

答案 0 :(得分:2)

请勿使用单个正则表达式强制执行此操作,请使用多个。例如,确定最后三个数字的最终位置,然后从该位置运行简单数字替换正则表达式。

答案 1 :(得分:0)

怎么样:

    String[] strings = {
            "213-333-4444",
            "233.444.5556",
            "(636) 434-5555"
    };
    String regex = "(\\D*\\d{3}\\D*)[\\d]{3}(.?)[\\d]{4}";
    String replacement = "$1222$22222";
    for (String string : strings) {
        System.out.println(string.replaceAll(regex, replacement));
    }

输出:

213-222-2222
233.222.2222
(636) 222-2222

答案 2 :(得分:0)

以这种方式得到解决方案。试试吧..

int count=0;
Pattern pattern = Pattern.compile("(\\d|\\D)");
Matcher m = pattern.matcher("213-333-4444");  //change this according to your need
while (m.find()) {
    Pattern pattern1 = Pattern.compile("(\\d)");
    Matcher m1 = pattern1.matcher(m.group());
    if(m1.find())
    {
        count++;
        if(count>3)
            System.out.print(m.group().replace(m.group(), "2"));
        else
             System.out.print(m.group());
    }
    else
        System.out.print(m.group());
        }

答案 3 :(得分:-2)

不使用正则表达式,为什么不从第4个元素开始循环遍历字符串的每个字符(因为您希望保留前3个字符)并检查它是否为数字并执行所需的操作。