正则表达式 - 仅在逗号后面紧跟字母或数字时插入空格

4

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

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

这段代码成功区分了逗号后面有空格和没有空格的字符串。我的问题是我无法想出如何编写表达式以便插入空格。上面的代码将用空格替换上面显示的字符串中的c。这不是我想要的。

在执行replaceAll之后,s1应该看起来像这样:"428.0 chf"

4个回答

4
s1.replaceAll(",(?=[\da-zA-Z])"," ");  

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

注意:

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

更好的表示方法是使用 [\da-zA-Z] 代替 \w,因为 \w 还包括你不需要匹配的下划线_


2

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

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

请注意,String.replaceAll()Matcher.replaceAll()的工作方式相同。从文档中可以看到:

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


2
String s1="428.0,chf";
s1 = s1.replaceAll(",([^_]\\w)"," $1"); //Match alphanumeric except '_' after ','
System.out.println(s1);

输出:-
428.0 chf

\w 匹配数字、单词和下划线,因此 [^_]\w 中排除了下划线。

$1 表示捕获的组。在这里,你捕获了逗号后面的 c,所以将 c 替换为 _$1,即可得到 _c。下划线表示一个空格。


这并不完全符合他的要求,我认为。注意逗号。 - Brian Agnew
@BrianAgnew.. 谢谢 :) .. 实际上原帖内容和标题不符.. 所以我第一次理解错了。已经修改了代码。 - Rohit Jain
\w 包括 \d..所以不需要 \d..但要注意 _ - Anirudha

0

尝试这个……

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.. 这个并没有检查下一个字符是字母还是数字的条件。 - Rohit Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接