我有一些标点符号[] punctuation = {'.', ',' , '!', '?'};
。我想创建一个正则表达式,可以匹配从这些标点组合而成的单词。
例如我想找到的一些字符串:"....???"
,"!!!!!......"
,"??.....!"
,依此类推。
感谢您的任何建议。
答案 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,} 部分进行播放。