我有一个代码,它将在字符串中分割2个单词并将它们放在一个数组中。
String words = "chill hit donkey chicken car roast pink rat tree";
到
[chill hit, donkey chicken, car roast, pink rat, tree]
这是我的代码:
String[] result = joined.split("(?<!\\G\\S+)\\s");
System.out.printf("%s%n", Arrays.toString(result));
现在,如何修改正则表达式,使其分成3个或更多单词?
输出(数组中的3个字):
[chill hit donkey, chicken car roast, pink rat tree]
输出(数组中的4个字):
[chill hit donkey chicken, car roast pink rat tree]
试图修改正则表达式,但到目前为止没有任何工作。感谢。
答案 0 :(得分:1)
您可以使用此正则表达式(使用re.find()
)
((?:\w+\s){2}(?:\w+)) (Replace `2` with `3` for 4 words)
<强> Regex Demo 强>
Java代码
String line = "chill hit donkey chicken car roast pink rat tree";
String pattern = "((?:\\w+\\s){2}(?:\\w+))";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
while (m.find()) {
System.out.println(m.group(1));
}
<强> Ideone Demo 强>
答案 1 :(得分:1)
将文本拆分为 N 组,我们可以使用此
((?:\ w + \ s){N-1}(?:\ w +))对于您使用的2个项目组((?:\ w + \ s) ){1}(?:\ W +))强>
并且对于3个项目的组使用((?:\ w + \ s){2}(?:\ w +))等等。
答案 2 :(得分:1)
这是另一个find()
版本 - 只需将{3}
更改为您喜欢的任何数字。
// ((?:\w+\W?){3})(?:(\W+|$))
String text = "chill hit donkey chicken car roast pink rat tree";
String regex = "((?:\\w+\\W?){3})(?:(\\W+|$))";
Matcher m = Pattern.compile(regex).matcher(text);
while (m.find()) {
System.out.println(String.format("'%s'", m.group(1)));
}
停止
'chill hit donkey'
'chicken car roast'
'pink rat tree'
答案 3 :(得分:0)
只需添加适当的额外数量的“nonwhitespace + whitespace”组合:
joined.split("(?<!\\G\\S+\\s+\\S+)\\s");
如果它们大于此值,你可以将\ S + \ s +组合在一起......`
joined.split("(?<!\\G(\\S+\\s+){2}\\S+)\\s");
4个单词,等等。