首页 新闻 搜索 专区 学院

求一个正则表达式

0
悬赏园豆:50 [已解决问题] 解决于 2015-01-06 09:27

输入字符串:abc,aa,a,a,a,a

要求将所有的,a,换成,,

结果应该是abc,aa,,,,a

java语言,我用的是String.replaceAll(",a,",",,");出来的结果是abc,aa,,a,,a。

三个连续的“,a,”只去掉了左边和右边的,中间的没有匹配到。

BiceG的主页 BiceG | 初学一级 | 园豆:179
提问于:2014-12-24 09:22
< >
分享
最佳答案
0

试一下递归: 

  public static string RecReplce(string s)
        {
            string res = Regex.Replace(s, ",a,", ",,");
            if (res == s) return res;
            else return RecReplce(res);
        }

收获园豆:50
醉心 | 初学一级 |园豆:99 | 2014-12-24 09:56
其他回答(4)
0

好吧,自己解决一下。。两次replace就可以了。

String.replaceAll(",a,",",,").replaceAll(",a,",",,");

BiceG | 园豆:179 (初学一级) | 2014-12-24 09:59
0

String.replaceAll(",a,",",,")

abc,aa,a,a,a,a

abc,aa,,a,,a

程序很正常,只是你理解错了

String.replaceAll(",a",",")

abc,aa,a,a,a,a

abc,aa,,,,a

刘宏玺 | 园豆:14006 (专家六级) | 2014-12-24 10:02

后面的程序你没跑过的吧?会匹配到前面的两个aa或者是后面的那个 ,a。我知道replaceAll(",a,",",,")肯定会出来abc,aa,,a,,a的结果,我只是来寻找解决办法的

支持(0) 反对(0) BiceG | 园豆:179 (初学一级) | 2014-12-24 10:15

@BiceG: 我倒是为跑过,确实会匹配到前面那个,我没注意!

String.replaceAll("a,",",")

abc,aa,a,a,a,a

abc,aa,,,,a

支持(0) 反对(0) 刘宏玺 | 园豆:14006 (专家六级) | 2014-12-24 10:20
0
public class Test {
    public static void main(String[] args) {
        
        System.out.println(replace2("abc,aa,a,a,a,a,"));
    }  
    private static String replace2(String strNew) {
        String str = strNew.replace(",a,", ",,");
        if (str.contains(",a,")) {
            str = replace2(str);
        }
        return str;
    }

}
我是爱哭鬼 | 园豆:208 (菜鸟二级) | 2014-12-24 14:40
0

你用正则表达式“,a{1},”去匹配一次,匹配成功的替换为“,,”

将返回的结果再用上述正则表达式进行匹配,匹配成功后按照上述再进行替换,直到没有匹配项为止。

正好是你要的结果“abc,aa,,,,a”

| 园豆:327 (菜鸟二级) | 2014-12-24 15:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册