首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dart RegExp未返回匹配项

Dart RegExp未返回匹配项
EN

Stack Overflow用户
提问于 2019-01-12 17:06:21
回答 2查看 178关注 0票数 2

我有一个经过测试的正则表达式,可以在字符串中拆分,分隔的短语,除非,在括号中。

在带有ECMAScript风格的https://regex101.com/r/COMj2b/1中使用此字符串测试正则表达式会得到所需的匹配项。在我的Dart版本中未打印任何匹配项。

任何指导都非常感谢!

代码语言:javascript
复制
void main() {
  String s = """Joe's Jazz Band (Ensemble), Fred Dagg (Guitar), Tommy Tucker (Horn, Clarinet), The Pied Piper (Whistle)""";
  RegExp re = RegExp(r'([^,(]*\([^)]*\))*[^,]*(,|$)');

  List li = s.split(re);
  print('$li');
}

我的Dart代码打印[,,,]

我希望它能打印出来:['Joe's Jazz Band (Ensemble)', 'Fred Dagg (Guitar)', 'Tommy Tucker (Horn, Clarinet)', 'The Pied Piper (Whistle)']

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-12 18:53:04

split不返回匹配项,但在模式的匹配项上拆分字符串,并返回子字符串列表。

假设分隔符是一个)括号,后面跟着零个或多个空格和一个逗号,这适用于拆分:

代码语言:javascript
复制
void main() {
  String s = """Joe's Jazz Band (Ensemble), Fred Dagg (Guitar), Tommy Tucker (Horn, Clarinet), The Pied Piper (Whistle)""";
  RegExp re = RegExp(r'\)[ \t]*,');

  Iterable li = s.split(re).map((item) => item.endsWith(")") ? item.trim() : "$item)".trim());

  li.forEach((item) => print('$item'));

}

请注意,有必要在最后拆分的元素处添加)。如果要删除前导空格和尾随空格,则trim()不是必需的。

票数 1
EN

Stack Overflow用户

发布于 2019-01-12 17:48:23

正如所说的,@attdona split不返回匹配项,所以如果你想获得匹配项,可以使用下面这样的内容:

代码语言:javascript
复制
void main() {
  String s = """Joe's Jazz Band (Ensemble), Fred Dagg (Guitar), Tommy Tucker (Horn, Clarinet), The Pied Piper (Whistle)""";
  RegExp re = RegExp(r'([^,(]*\([^)]*\))*[^,]*(,|$)');

  List l = re.allMatches(s).toList();
  List<String> li = new List();
  for(Match e in l) {
    li.add(e.group(0));
  }

  print('$li');
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54158129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档