Java 正则表达式在所有标点符号之间添加空格
我需要在字符串中的所有标点符号之间添加空格Java 正则表达式在所有标点符号之间添加空格,java,regex,Java,Regex,我需要在字符串中的所有标点符号之间添加空格 \\ "Hello: World." -> "Hello : World ." \\ "It's 9:00?" -> "It ' s 9 : 00 ?" \\ "1.B,3.D!" -> "1 . B , 3 . D !" 我认为正则表达式是一种方法,匹配所有非标点符号[a-ZA-Z\\d]+,在前后添加空格,然后提取与所有标点符号[^a-ZA-Z\\d]+匹配的余数 但我不知道如何(递归地)调用这个正则表达式。查看
\\ "Hello: World." -> "Hello : World ."
\\ "It's 9:00?" -> "It ' s 9 : 00 ?"
\\ "1.B,3.D!" -> "1 . B , 3 . D !"
我认为正则表达式是一种方法,匹配所有非标点符号[a-ZA-Z\\d]+
,在前后添加空格,然后提取与所有标点符号[^a-ZA-Z\\d]+
匹配的余数
但我不知道如何(递归地)调用这个正则表达式。查看第一个示例,正则表达式将只与中的“Hello”
匹配。我正在考虑通过不断删除和附加匹配正则表达式的第一个实例来构建一个新字符串,而原始字符串不是空的
private String addspacesBeforReconuction(字符串s){
StringBuilder=新的StringBuilder();
最后一个字符串nonpunchuation=“[a-zA-Z\\d]+”;
最后一个字符串标点符号=“[^a-zA-Z\\d]+”;
找到字符串;
而(!s.isEmpty()){
//正则表达式的东西在这里
found=???;//从相应正则表达式中找到的组位于此处
builder.append(找到);
生成器。追加(“”);
s=s.replaceFirst(找到“”);
}
返回builder.toString().trim();
}
然而,这似乎不是正确的方向。。。我认为我把事情复杂化了…您可以在Java中使用标点属性
\p{Punct}
使用基于lookarounds的正则表达式:
str = str.replaceAll("(?<=\\S)(?:(?<=\\p{Punct})|(?=\\p{Punct}))(?=\\S)", " ");
str=str.replaceAll(“(?当您看到标点符号时,有四种可能:
标点符号周围有空格
标点符号前面有空格
标点符号后面跟一个空格
标点符号前面和后面都没有空格
以下是正确进行更换的代码:
String ss = s
.replaceAll("(?<=\\S)\\p{Punct}", " $0")
.replaceAll("\\p{Punct}(?=\\S)", "$0 ");
字符串ss=s
.replaceAll(”(?现在如果字符串末尾有标点符号,它会在字符串末尾添加一个空格。@realphavorit:捕捉得很好。我已经修复了它,现在检查我更新的正则表达式和演示。@anubhava糟糕的连接。必须退出。见realphavorit的评论!@laune:是的,我已经根据那个评论更新了正则表达式,请现在检查。@anubhava和我觉得头痛少了一点-试图理解它的原因是:“(?)?