我有一些标点符号[] punctuation = {'.', ',' , '!', '?'};
。我想创建一个可以匹配从这些标点符号组合的单词的正则表达式。
例如我想查找的一些字符串:"....???"
, "!!!!!......"
, "??.....!"
, 等等。
感谢您的任何建议。
String.matches()
与“标点符号”的 posix 正则表达式一起使用:
str.matches("\\p{Punct}+");
根据Pattern
javadoc仅供参考,\p{Punct}
是其中之一
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
此外,表达式中也不需要 and,因为^
必须匹配整个输入才能返回 true,因此隐含了 start 和 end。$
matches()
试试这个,它应该匹配并分组写在 之间的所有符号[]
:
([.,!?]+)
用它测试过
??..,..!fsdgsdfgsdfgsdfg
输出是
??..,..!
也用这个进行了测试:
String s = "??.....!fsdgsdfgsdfgsdfg?.,!0000a";
Pattern p = Pattern.compile("([.,!?]+)");
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group(1));
}
输出是
??.....!
?.,!
您可以尝试使用 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
.