flutter 如何防止在[ ]之间只使用正则表达式进行多匹配

igetnqfo  于 2022-11-17  发布在  Flutter
关注(0)|答案(1)|浏览(95)

我在正则表达式中有一个异常。用这个正则表达式
https://regex101.com/r/pxTfci/1
我可以匹配由,分隔的字符串中的所有数据(key:value)。问题我与格式类似的某个List发生冲突
我的列表:[数据1,数据2,数据3]
使用此正则表达式(?<=(?<!: *)\[).*?(?=, )|(?<=, +(?=[^ \r\n]))(?:.*?(?=, )|[^\r\n\[\]]+?(?=\])|[^\r\n]+\](?= *\]))
我有三个火柴

match 1 = Mylist:[data1
match 2 = data2
match 3 = data3]

我搜索这个异常,当我有[]时,在输出中有Mylist:[data1, data2, data3]
我不知道这是否可能。下面是一个完整输入格式的例子。

MyString=[XXXXXX:XX   XX   XX   XX, XXXXX:332.83, XXXXX:XXX-XX-XX XX:XX:XX, XXXX:0.0, XXXX:2, XXXX:0, XXXX:-256, XXXX:5, XXXX:136935, XXXX:0, XXXX:XX XXX XXX, XXXX:0.5, XXXXX:true, XXXX:0.509375, XXX:0.0, 2022-09-17,XXXXX:1, list1:[2000-00-00 00:00, 2022-11-16 15:29, 2022-11-16 15:29], list2:[2000-00-00 00:00, 2022-11-16 15:29, 2022-11-16 15:29], ]

我寻找

match 1 = XXXXXX:XX   XX   XX   XX
match 2 = XXXXX:332.83
...
match x =2022-09-17,XXXXX:1
match y =list1:[2000-00-00 00:00, 2022-11-16 15:29, 2022-11-16 15:29]
match z =list2:[2000-00-00 00:00, 2022-11-16 15:29, 2022-11-16 15:29]
9w11ddsr

9w11ddsr1#

您有两个选项:
首先尝试这样做:

List<String> listString = [];
                String MyString =
                    "[XXXXXX:XX   XX   XX   XX, XXXXX:332.83, XXXXX:XXX-XX-XX XX:XX:XX, XXXX:0.0, XXXX:2, XXXX:0, XXXX:-256, XXXX:5, XXXX:136935, XXXX:0, XXXX:XX XXX XXX, XXXX:0.5, XXXXX:true, XXXX:0.509375, XXX:0.0, 2022-09-17,XXXXX:1, list1:[2000-00-00 00:00, 2022-11-16 15:29, 2022-11-16 15:29], list2:[2000-00-00 00:00, 2022-11-16 15:29, 2022-11-16 15:29], ]";
                String newString = MyString.substring(1, MyString.length - 1);
                bool save = true;
                int start = 0;
                for (int i = 0; i < newString.length; i++) {
                  if (newString[i] == "," && save) {
                    listeString.add(newString.substring(start, i));
                    start = i + 1;
                  } else if (newString[i] == "[") {
                    save = false;
                  } else if (newString[i] == "]") {
                    save = true;
                  }
                }


创建字符串时,可以将列表中的“,”替换为可以轻松更改的特殊字符。
祝你今天愉快

相关问题