我需要拆分此字符串
(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
问题是在[]捕捉(年)之后没有任何东西它不应该做什么
答案 0 :(得分:2)
模式的(.+?)(?=\[|\(|$)
部分匹配除换行符之外的任何一个或多个字符,直到最左边的[
,(
或字符串的结尾。您需要在此处匹配零或更多字符。
但是,这里的[^\[(]
否定字符类将更有效和优雅:
\[(.*?)\]([^\[(]*)
请参阅this regex demo。
或者更有效率,
\[([^\]\[]*)\]([^\[(]*)
<强>详情
\[
- [
([^\]\[]*)
- 第1组:除[
和]
以外的任何0 +字符\]
- ]
([^\[(]*)
- 第2组:除[
和(
以外的任何0 +字符。