java - 用于拆分包含多个组的字符串的正则表达式
java - Regex to split a string containing multiple groups
我需要拆分这个字符串
(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 中 [ ] 中的值和捕获中字符串 (1,2,3,4) 的其余部分第 2 组并重复整个字符串
我已经创建了这个正则表达式字符串,但它没有按预期工作
\[(.*?)\](.+?)(?=\[|\(|$)
Please see my regex implementation
问题是当 [] 之后没有任何内容时它正在捕获它不应该做的 (year)
模式的 (.+?)(?=\[|\(|$)
部分匹配除换行符之外的任何 1 个或多个字符,直到最左边的 [
、(
或字符串结尾。您需要在此处允许匹配 零 个或更多字符。
不过,这里一个[^\[(]
否定字符class会更高效优雅:
\[(.*?)\]([^\[(]*)
参见 this regex demo。
还是效率高一点,
\[([^\]\[]*)\]([^\[(]*)
详情
\[
- 一个[
([^\]\[]*)
- 第 1 组:除 [
和 ]
之外的任何 0+ 个字符
\]
- 一个]
([^\[(]*)
- 第 2 组:除 [
和 (
. 之外的任何 0+ 个字符
我需要拆分这个字符串
(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 中 [ ] 中的值和捕获中字符串 (1,2,3,4) 的其余部分第 2 组并重复整个字符串
我已经创建了这个正则表达式字符串,但它没有按预期工作
\[(.*?)\](.+?)(?=\[|\(|$)
Please see my regex implementation
问题是当 [] 之后没有任何内容时它正在捕获它不应该做的 (year)
模式的 (.+?)(?=\[|\(|$)
部分匹配除换行符之外的任何 1 个或多个字符,直到最左边的 [
、(
或字符串结尾。您需要在此处允许匹配 零 个或更多字符。
不过,这里一个[^\[(]
否定字符class会更高效优雅:
\[(.*?)\]([^\[(]*)
参见 this regex demo。
还是效率高一点,
\[([^\]\[]*)\]([^\[(]*)
详情
\[
- 一个[
([^\]\[]*)
- 第 1 组:除[
和]
之外的任何 0+ 个字符
\]
- 一个]
([^\[(]*)
- 第 2 组:除[
和(
. 之外的任何 0+ 个字符