java - 正则表达式拆分包含多个组的字符串

时间:2017-10-27 13:37:11

标签: java regex regex-lookarounds

我需要拆分此字符串

(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

作为:

1, "1,2,3,4"  
2, 1 2
2, 2–;3,4

输入"(2005)[1] 1,2,3,4"我需要捕获组1中的[]值 重置捕获组2中的字符串(1,2,3,4)并重复整个字符串

我创建了这个正则表达式字符串,但它没有按预期工作

\[(.*?)\](.+?)(?=\[|\(|$)

Please see my regex implementation

问题是在[]捕捉(年)之后没有任何东西它不应该做什么

1 个答案:

答案 0 :(得分:2)

模式的(.+?)(?=\[|\(|$)部分匹配除换行符之外的任何一个或多个字符,直到最左边的[(或字符串的结尾。您需要在此处匹配或更多字符。

但是,这里的[^\[(]否定字符类将更有效和优雅:

\[(.*?)\]([^\[(]*)

请参阅this regex demo

或者更有效率,

\[([^\]\[]*)\]([^\[(]*)

请参阅another regex demo

<强>详情

  • \[ - [
  • ([^\]\[]*) - 第1组:除[]以外的任何0 +字符
  • \] - ]
  • ([^\[(]*) - 第2组:除[(以外的任何0 +字符。
相关问题