字符串拆分3个或更多单词

时间:2016-05-21 07:11:22

标签: java regex

我有一个代码,它将在字符串中分割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]

试图修改正则表达式,但到目前为止没有任何工作。感谢。

4 个答案:

答案 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}更改为您喜欢的任何数字。

Regex demo

// ((?:\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)));
}

Ideone.com

停止

'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个单词,等等。