如何将所有正则表达式匹配项放入一个字符串列表中

6

我有一个包含随机日期的列表,格式如下:

String x ="Text(\"key:[2020-08-23 22:22, 2020-08-22 10:11, 2020-02-22 12:14]\"),"

我可以使用正则表达式\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}来匹配变量x中的所有日期:
RegExp regExp79 = new RegExp(
    r'\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}',
);
var match79 = regExp79.allMatches("$x");
var mylistdate = match79;

所以,这些是匹配项:

match 1 = 2020-08-22 22:22
match 2 = 2020-08-22 10:11
match 3 = 2020-02-22 12:14

我想把 Iterable<RegExpMatch> 转换成字符串列表,使得我的列表输出像这样:
[2020-08-22 22:22, 2020-08-22 10:11, 2020-02-22 12:14]

请考虑添加您尝试解决问题的代码,以便帮助您。 - Wiktor Stribiżew
这是一个正则表达式:\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}。 - Nitneuq
1
var mylistdate = match79.map((z) => z.group(0)); 这就是你需要的吗? - Wiktor Stribiżew
是的,我在mylistdate中有所有的日期匹配,但是想要将这些匹配添加到一个Stringlist中。如果我有5个日期匹配,我想将这些匹配保存在我的String列表的index[0]、index[1]、index[2]、index[3]、index[4]中。 - Nitneuq
谢谢,我会尝试的,看起来正是我需要的。 - Nitneuq
显示剩余11条评论
1个回答

10
allMatches方法返回一个Iterable<RegExpMatch>值,其中包含所有包含匹配详情的RegExpMatch对象。你需要在每个RegExpMatch对象上调用.group(0)方法来获取匹配项的字符串值。

因此,你需要对结果进行.map

your_regex.allMatches(x).map((z) => z.group(0)).toList()

代码:

String x ="Text(\"key:[2020-08-23 22:22, 2020-08-22 10:11, 2020-02-22 12:14]\"),";
RegExp regExp79 = new RegExp(r'\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}');
var mylistdate = regExp79.allMatches(x).map((z) => z.group(0)).toList();
print(mylistdate);

输出:

[2020-08-23 22:22, 2020-08-22 10:11, 2020-02-22 12:14]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接