我有一个经过测试的正则表达式,可以将created
分隔的字符串分割成字符串,除非,
放在方括号中。
在https://regex101.com/r/COMj2b/1中以ECMAScript风格在此字符串中测试正则表达式会得到所需的匹配。我的Dart版本没有打印任何匹配项。
非常感谢任何指导!
,
我的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');
}
。
我希望它能打印:
[,,,]
答案 0 :(得分:1)
split不返回匹配项,而是在模式匹配项处拆分字符串,并返回子字符串列表。
假设分隔符是一个)
括号,后跟零个或多个空格和一个逗号,则可用于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()
并不是必需的。
答案 1 :(得分:0)
如前所述,@ 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');
}