gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:20:34 25 4
gpt4 key购买 nike

我需要分割这个字符串

(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 个或多个字符,直到最左边的 [( 或字符串结尾。您需要允许在此处匹配个或多个字符。

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

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

参见this regex demo .

或者更高效一点,

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

参见another regex demo .

详细信息

  • \[ - 一个 [
  • ([^\]\[]*) - 第 1 组:除 [] 之外的任何 0+ 个字符
  • \] - ]
  • ([^\[(]*) - 第 2 组:除 [( 之外的任何 0+ 个字符。

关于java - 正则表达式分割包含多个组的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46976383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com