Dart RegExp不返回匹配项
我有一个经过测试的正则表达式来拆分字符串中的Dart RegExp不返回匹配项,dart,Dart,我有一个经过测试的正则表达式来拆分字符串中的,分隔短语,除非,在括号中 在带有ECMAScript风格的中使用此字符串测试正则表达式,可以得到所需的匹配项。在我的Dart版本中没有打印匹配项 非常感谢您的指导 void main() { String s = """Joe's Jazz Band (Ensemble), Fred Dagg (Guitar), Tommy Tucker (Horn, Clarinet), The Pied Piper (Whistle)"""; RegEx
,
分隔短语,除非,
在括号中
在带有ECMAScript风格的中使用此字符串测试正则表达式,可以得到所需的匹配项。在我的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代码打印[,,]
我希望它能打印:
[“乔的爵士乐队(合奏)”,“弗雷德·达格(吉他)”,“汤米·塔克(号角、单簧管)”,“彩笛手(哨子)”,
正如@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');
}
void main(){
弦乐s=“”“乔的爵士乐队(合奏)、弗雷德·达格(吉他)、汤米·塔克(号角、单簧管)、彩笛手(口哨)”;
RegExp re=RegExp(r'([^,(]*\([^)]*\)*[^,]*(,|$));
List l=re.allMatches.toList();
List li=新列表();
for(l中匹配e){
添加(e组(0));
}
印刷品(“$li”);
}
不返回匹配项,但在模式匹配项处拆分字符串并返回子字符串列表
假设分隔符是一个)
括号,后跟零个或多个空格和一个逗号,这适用于拆分:
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()
所以基本上我们通过正则表达式来表示拆分原始字符串的char/string?是的,没错。在这种情况下,它正确地返回[,,]
@altdona感谢您的回复,但我仍然没有得到它。另外,Dartpad报告RE:Uncaught exception:FormatException:Invalize RegExp模式(语法错误:无效正则表达式:/)[t]*,/:Unterminated character class][t]*,很抱歉,这是一个打字错误:我为制表符编写了t\而不是\t
。可能我不理解术语“匹配”。在[,,]中,子字符串的长度为0-那么为什么这是正确的?谢谢@Denis Sablukov。你的代码最适合我的需要。(不幸的是,我不能同时接受这两个答案。)