首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java拆分包含多个组的字符串

java拆分包含多个组的字符串
EN

Stack Overflow用户
提问于 2017-10-27 13:37:11
回答 1查看 1.3K关注 0票数 1

我要拆开这条绳子

代码语言:javascript
运行
复制
(2005)[1]1,2,3,4[2]1(2008)[2]2–;3,4(2009)[3]1,2,3-4(2010)[4]1,2,3-4(2011)[5]1(2012)[5]2,3-4[6]1,2\[\](2014)[6]3-4[7]1-2(2015)[7]3-4[8]1-2(2016)[10]1[8]3-4[9]1-2,3-4(2017)[10]2

作为:

代码语言:javascript
运行
复制
1, "1,2,3,4"  
2, 1 2
2, 2–;3,4

对于输入"(2005)11,2,3,4“,我需要值在捕获组1中,其余字符串(1,2,3,4)在捕获组2中,并对整个字符串重复。

我已经创建了这个regex字符串,但是它没有按预期工作。

代码语言:javascript
运行
复制
\[(.*?)\](.+?)(?=\[|\(|$)

请参阅我的regex实现。

问题是当它捕获(年份)之后没有任何东西,而它不应该这样做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-27 13:46:54

模式的(.+?)(?=\[|\(|$)部分匹配除最左边的[(或字符串末尾的换行符以外的任何一个或多个字符。您需要允许在这里匹配零或多个字符。

但是,这里的[^\[(]否定字符类会更高效、更优雅:

代码语言:javascript
运行
复制
\[(.*?)\]([^\[(]*)

这个regex演示

或者更有效率,

代码语言:javascript
运行
复制
\[([^\]\[]*)\]([^\[(]*)

另一个regex演示

详细信息

  • \[ -a [
  • ([^\]\[]*) -第1组:除[]以外的任何0+字符
  • \] -a ]
  • ([^\[(]*) -第2组:除[(以外的任何0+字符。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46976383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档