Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式在每三个空格后拆分_Java_Regex - Fatal编程技术网

Java正则表达式在每三个空格后拆分

Java正则表达式在每三个空格后拆分,java,regex,Java,Regex,假设我有一个字符串“a1bc23def456”,我想每三个空格将它拆分一次,得到子字符串“a1b”,“c23”,“def”,等等。我用正则表达式怎么做?我尝试过不同的“(?=[\\w+][\\s+][\\w+][\\s+][\\w+][\\w+][\\s+])”似乎都不对。什么是正确的正则表达式?将模式匹配器与正则表达式模式一起使用: \S+(?:\S+\S+{0,2} 这将根据您的定义匹配输入中的每个术语: \S+匹配第一个“单词” (?: \s+空格 \S+另一个词 ){0,2}零到两次

假设我有一个字符串
“a1bc23def456”
,我想每三个空格将它拆分一次,得到子字符串
“a1b”
“c23”
“def”
,等等。我用正则表达式怎么做?我尝试过不同的
“(?=[\\w+][\\s+][\\w+][\\s+][\\w+][\\w+][\\s+])”
似乎都不对。什么是正确的正则表达式?

将模式匹配器与正则表达式模式一起使用:

\S+(?:\S+\S+{0,2}
这将根据您的定义匹配输入中的每个术语:

\S+匹配第一个“单词”
(?:
\s+空格
\S+另一个词
){0,2}零到两次
String input=“a 1 b c 2 3 d e f 4 5”;
字符串模式=“\\S+(?:\\S+\\S+{0,2}”;
Pattern r=Pattern.compile(Pattern);
匹配器m=r.匹配器(输入);
列表匹配项=新的ArrayList();
while(m.find()){
匹配。添加(m.group(0));
}
System.out.println(匹配项);
这张照片是:

[a1b,c23,def,45]

将模式匹配器与正则表达式模式一起使用:

\S+(?:\S+\S+{0,2}
这将根据您的定义匹配输入中的每个术语:

\S+匹配第一个“单词”
(?:
\s+空格
\S+另一个词
){0,2}零到两次
String input=“a 1 b c 2 3 d e f 4 5”;
字符串模式=“\\S+(?:\\S+\\S+{0,2}”;
Pattern r=Pattern.compile(Pattern);
匹配器m=r.匹配器(输入);
列表匹配项=新的ArrayList();
while(m.find()){
匹配。添加(m.group(0));
}
System.out.println(匹配项);
这张照片是:

[a1b,c23,def,45]

如果值的数量不是3的倍数,则与“每三个空格后分割”不同。例如,输入
“ab c d”
将拆分为
[“ab c”,“d”]
,如果您在每三个空格上拆分,但此代码将返回
[“ab c”]
,并默默地丢弃悬挂的
“d”
@Andreas您是对的,但至少OP似乎只想要三元组匹配,并且似乎丢弃了结尾处不匹配的部分。是的,但您的答案应该提到此实现的“限制”或怪癖。@Andreas我“修复”了我的答案(但只需等待OP告诉我们它需要原始版本
:-)
)仅供参考:我的编辑并不是为了指定语言,但更简单的是,将块与解释和代码一分为二。一条空注释(
)就可以做到这一点。指定语言来控制颜色编码只是锦上添花。如果值的数量不是3的倍数,那么这与“每三分之一空格后分割”不同。例如,输入
“ab c d”
将拆分为
[“ab c”,“d”]
,如果您在每三个空格上拆分,但此代码将返回
[“ab c”]
,并默默地丢弃悬挂的
“d”
@Andreas您是对的,但至少OP似乎只想要三元组匹配,并且似乎丢弃了结尾处不匹配的部分。是的,但您的答案应该提到此实现的“限制”或怪癖。@Andreas我“修复”了我的答案(但只需等待OP告诉我们它需要原始版本
:-)
)仅供参考:我的编辑并不是为了指定语言,但更简单的是,将块与解释和代码一分为二。一条空注释(
)就可以做到这一点。指定语言来控制颜色编码只是锦上添花。