首页 > 解决方案 > 如何在 Dart 的 RegEx 文本中获取组的开始和结束索引?

问题描述

例如,使用以下代码:

final regex = RegExp(r'([0-9]).*([A-Z])');
final text = 'Test 5 with B';
final match = regex.firstMatch(text);

那么match.group(1)'5'match.group(2)'B'。但是,如何获取每个组的开始和结束索引,以便我可以用空格或其他东西替换它们?

标签: regexdart

解决方案


对象的Match.start()Match.end()方法Match不提供任何获取组索引的方法。您需要将第一个匹配项直接替换为捕获您需要保留的内容的模式:

final regex = RegExp(r'[0-9](.*)[A-Z]');
final text = 'Test 5 with B';
print(text.replaceFirstMapped(regex, (match) {
   return "Cat${match.group(1)}Dog"; }
));
// => Test Cat with Dog

这里,

  • [0-9](.*)[A-Z]匹配一个数字,然后将除换行符之外的任何零个或多个字符捕获到第 1 组中,然后[A-Z]匹配一个大写的 ASCII 字母
  • replaceFirstMapped替换第一场比赛......
  • "Cat${match.group(1)}Dog"- 带有Cat+ 组 1 值 + Dog

推荐阅读