【问题标题】:Regular Expression - inserting space after comma only if succeeded by a letter or number正则表达式 - 仅在逗号后插入空格,如果后面是字母或数字
【发布时间】:2012-10-11 01:34:11
【问题描述】:

在 Java 中,我想在字符串后插入一个空格,但前提是逗号后的字符后面是数字或字母。我希望使用使用正则表达式作为参数的 replaceAll 方法。到目前为止,我有以下内容:

String s1="428.0,chf";
s1 = s1.replaceAll(",(\\d|\\w)",", ");   

这段代码确实成功地区分了上面的字符串和逗号后面已经有空格的字符串。我的问题是我不知道如何编写表达式以便插入空格。上面的代码将上面显示的字符串中的 c 替换为空格。这不是我想要的。

s1在执行replaceAll后应该是这样的:"428.0 chf"

【问题讨论】:

    标签: java regex


    【解决方案1】:
    s1.replaceAll(",(?=[\da-zA-Z])"," ");  
    

    (?=[\da-zA-Z]) 是一个positive lookahead,它会在, 之后查找一个数字或一个单词。这个前瞻不会被替换,因为它永远不会包含在结果中。它只是一个检查

    注意

    \w 包括数字、字母和_。所以不需要\d

    更好的表示方法是[\da-zA-Z] 而不是\w,因为\w 还包括_,您不需要2 个匹配项

    【讨论】:

      【解决方案2】:

      试试这个,注意$1 指的是你匹配的分组:

      s1.replaceAll(",(\\d|\\w)"," $1");
      

      请注意,String.replaceAll() 的工作方式与 Matcher.replaceAll() 相同。来自the doc

      替换字符串可能包含对捕获子序列的引用

      【讨论】:

        【解决方案3】:
        String s1="428.0,chf";
        s1 = s1.replaceAll(",([^_]\\w)"," $1"); //Match alphanumeric except '_' after ','
        System.out.println(s1);
        

        输出:-

        428.0 chf
        

        由于\w 匹配digitswords,underscore,所以,[^_]\w 否定underscore..

        $1 代表被捕获的组.. 你在这里捕获c, 之后,所以将c 替换为_$1 -> _c.. "_" 代表一个空格..

        【讨论】:

        • 这并不完全符合他的要求,我不认为。注意逗号
        • @BrianAgnew .. 谢谢 :) .. 实际上 OP 的内容和标题不匹配.. 所以我第一次弄错了。编辑代码..
        • \w 包括\d..不需要\d 然后..注意_ 虽然
        • @Anirudha.. 已编辑.. 谢谢 :)
        【解决方案4】:

        试试这个....

        public class Tes {
        
            public static void main(String[] args){
        
                String s1="428.0,chf";
        
                String[] sArr = s1.split(",");
        
                String finalStr = new String();
        
                for(String s : sArr){
        
                    finalStr = finalStr +" "+ s;
                }
        
                System.out.println(finalStr);
        
            }
        
        }
        

        【讨论】:

        • @KumarVivekMitra.. 这不会检查下一个字符是字母还是数字的条件..
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-04
        • 2020-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多