我希望正则表达式匹配任何2或1个字符的单词示例(是,an,或者,如果,a)
我试过这个: -
int scount = 0;
String txt = "hello everyone this is just test aa ";
Pattern p2 = Pattern.compile("\\w{1,2}");
Matcher m2 = p2.matcher(txt);
while (m2.find()) {
scount++;
}
但错误的比赛。
答案 0 :(得分:4)
您可能想要使用word boundary anchors:
Pattern p2 = Pattern.compile("\\b\\w{1,2}\\b");
这些锚点在字母数字“单词”的开头/结尾处匹配,即在\w
字符之前的位置匹配,如果之前没有\w
字符,或者在{{1}之后如果之后没有\w
字符,则为字符。
答案 1 :(得分:1)
我认为你应该更具描述性。来自变量scount
的当前代码returns 15。那不是没有。
如果你想得到2个字母单词的数量,并且不包括下划线,这个数字中的数字,我认为你会有更好的负面看法:
Pattern.compile("(?i)(?<![a-z])[a-z]{1,2}(?![a-z])");
如果字符串输入为hello everyone this is just 1 test aa
,则scount
的值为2(is
和aa
)而非3 {is
,{ {1}},1
),如果您只查找1或2个连续aa
,则会如此。
此外,对于\w
,您使用hello everyone this is just test aa_
(\w
)获得1分,但只有2(is
,is
)