有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我需要把这根绳子分开

(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) 个答案

  1. # 1 楼答案

    模式的(.+?)(?=\[|\(|$)部分匹配任何1个或多个字符,而不是最左边的[(或字符串末尾的换行符。这里需要允许匹配或更多字符

    但是,此处的[^\[(]否定字符类将更高效、更优雅:

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

    this regex demo

    或者更高效一点

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

    another regex demo

    详细信息

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