正则表达式匹配java中的重复标点符号

时间:2013-07-07 08:57:52

标签: java regex

我有一些标点符号[] punctuation = {'.', ',' , '!', '?'};。我想创建一个正则表达式,可以匹配从这些标点组合而成的单词。

例如我想找到的一些字符串:"....???""!!!!!......""??.....!",依此类推。

感谢您的任何建议。

3 个答案:

答案 0 :(得分:3)

String.matches()与posix正则表达式一起用于“标点符号”:

str.matches("\\p{Punct}+");

根据Pattern javadoc的费用,\p{Punct}

之一
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

此外,表达式中也不需要^$,因为matches()必须匹配整个输入才能返回true,所以启动暗示结束。

答案 1 :(得分:1)

试试这个,它应匹配并分组[]

之间写的所有符号
([.,!?]+)

测试
??..,..!fsdgsdfgsdfgsdfg

输出

??..,..!

还测试了这个:

String s = "??.....!fsdgsdfgsdfgsdfg?.,!0000a";
Pattern p = Pattern.compile("([.,!?]+)");
Matcher m = p.matcher(s);
while(m.find()) {
    System.out.println(m.group(1));
}

输出

??.....!
?.,!

答案 2 :(得分:0)

您可以尝试使用Unicode类别标点符号和while循环来匹配您的输入,如下所示:

String test = "!...abcd??...!!efgh....!!??abc!";
Pattern pattern = Pattern.compile("\\p{Punct}{2,}");
Matcher matcher = pattern.matcher(test);
while (matcher.find()) {
    System.out.println(matcher.group());
}

输出:

!...
??...!!
....!!??

注意:这样做的好处是匹配任何标点字符序列大于1个字符(因此,最后一个“!”与设计不匹配< / em>的)。要确定标点符号序列的最小长度,只需使用Pattern {2,} 部分进行播放。