我需要一个正则表达式来替换所有内容,除了第一个“和最后一个”之间的内容。
我需要这样:
输入字符串:["Key:"Value""]
在正则表达式之后,我只需要这个:
输出字符串:Key:"Value"
谢谢!
答案 0 :(得分:1)
您可以尝试这样的事情。
样式:
^.*?"(.*)".*$
订阅:
$1
经验:
第一部分^.*?"
匹配字符串开头和双引号之间的尽可能少的字符
第二部分(.*)"
进行最大的匹配,并以双引号结尾,并将其全部填充到捕获组中
最后一部分.*$
抓住剩下的所有东西并将其包括在比赛中
最后,将整个匹配项替换为第一个捕获组的内容
答案 1 :(得分:1)
您能说说为什么需要 RegExp 吗? 像这样的功能:
String unquote(String input) {
int start = input.indexOf('"');
if (start < 0) return input; // or throw.
int end = input.lastIndexOf('"');
if (start == end) return input; // or throw
return input.substring(start + 1, end);
}
比RegExp更快更容易理解。
无论如何,对于挑战来说,我们确实希望有一个RegExp可以用零来替换直到第一个"
以及最后一个"
为止的部分。这是两个替换项,因此您可以执行
input.replaceAll(RegExp(r'^[^"]*"|"[^"]*$'), "")`
或者您可以使用捕获组和计算的替代值,例如:
input.replaceFirstMapped(RegExp(r'^[^"]*"([^]*)"[^"]*$'), (m) => m[1])
或者,您可以使用捕获组在两个文本之间选择,并将其提取为代码,而不用替换字符串:
String unquote(String input) {
var re = RegExp(r'^[^"]*"([^]*)"[^"]$');
var match = re.firstMatch(input);
if (match == null) return input; // or throw.
return match[1];
}