我有一个经过测试的正则表达式,可以在字符串中拆分,分隔的短语,除非,在括号中。
在带有ECMAScript风格的https://regex101.com/r/COMj2b/1中使用此字符串测试正则表达式会得到所需的匹配项。在我的Dart版本中未打印任何匹配项。
任何指导都非常感谢!
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)']
发布于 2019-01-12 18:53:04
split不返回匹配项,但在模式的匹配项上拆分字符串,并返回子字符串列表。
假设分隔符是一个)括号,后面跟着零个或多个空格和一个逗号,这适用于拆分:
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()不是必需的。
发布于 2019-01-12 17:48:23
正如所说的,@attdona split不返回匹配项,所以如果你想获得匹配项,可以使用下面这样的内容:
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');
}https://stackoverflow.com/questions/54158129
复制相似问题