-2

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

例如我想查找的一些字符串:"....???", "!!!!!......", "??.....!", 等等。

感谢您的任何建议。

4

3 回答 3

3

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

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

根据Patternjavadoc仅供参考,\p{Punct}是其中之一

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

此外,表达式中也不需要 and,因为^必须匹配整个输入才能返回 true,因此隐含了 start 和 end。$matches()

于 2013-07-07T09:23:13.163 回答
1

试试这个,它应该匹配并分组写在 之间的所有符号[]

([.,!?]+)

用它测试过

??..,..!fsdgsdfgsdfgsdfg

输出是

??..,..!

也用这个进行了测试:

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

输出是

??.....!
?.,!
于 2013-07-07T09:00:03.523 回答
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 个字符的标点字符序列的优点(因此,最后一个“!”不是设计匹配的)。要确定标点序列的最小长度,只需使用Pattern.

于 2013-07-07T09:13:01.860 回答