我要拆开这条绳子
(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)11,2,3,4“,我需要值在捕获组1中,其余字符串(1,2,3,4)在捕获组2中,并对整个字符串重复。
我已经创建了这个regex字符串,但是它没有按预期工作。
\[(.*?)\](.+?)(?=\[|\(|$)
问题是当它捕获(年份)之后没有任何东西,而它不应该这样做。
发布于 2017-10-27 13:46:54
模式的(.+?)(?=\[|\(|$)
部分匹配除最左边的[
、(
或字符串末尾的换行符以外的任何一个或多个字符。您需要允许在这里匹配零或多个字符。
但是,这里的[^\[(]
否定字符类会更高效、更优雅:
\[(.*?)\]([^\[(]*)
或者更有效率,
\[([^\]\[]*)\]([^\[(]*)
详细信息
\[
-a [
([^\]\[]*)
-第1组:除[
和]
以外的任何0+字符\]
-a ]
([^\[(]*)
-第2组:除[
和(
以外的任何0+字符。https://stackoverflow.com/questions/46976383
复制相似问题