简单的问题在这里伙计们。我正在尝试创建一个与C#中的Regex一起使用的模式。
这是我的尝试:
"(value\":\[\[\"([A-Za-z0-9]+(?:-{0,1})[A-Za-z0-9]+)\"\]\])"
但是出于某种原因,当我去编译它时,我在括号上得到“无法识别的转义序列”。我不能简单地用\来逃避括号吗?
我正在搜索的字符串具有
的形式value":[["AB-AB"]]
或
value":[["ABAB"]]
我想从结果中抓取组[1]。
答案 0 :(得分:3)
默认情况下,C#编译器不允许它无法识别的转义序列。您可以使用“@”覆盖此行为,如下所示:
@"(value\"":\[\[\""([A-Za-z0-9]+(?:-{0,1})[A-Za-z0-9]+)\""\]\])"
编辑:
@符号比这复杂一点。引用@Guffa:
@分隔字符串根本不使用反斜杠进行转义 序列。
此外,请注意,此类字符串中\"
的替换为""
答案 1 :(得分:2)
我建议将你的模式放在一个逐字的字符串文字中,同时实现一个否定的字符类来匹配上下文;然后引用第一组来获取匹配结果。
String s = @"I have value"":[[""AB-AB""]] and value"":[[""ABAB""]]";
foreach (Match m in Regex.Matches(s, @"value"":\[\[""([^""]+)""]]"))
Console.WriteLine(m.Groups[1].Value);
输出
AB-AB
ABAB