使用括号的正则表达式模式

时间:2015-01-21 20:57:47

标签: c# regex

简单的问题在这里伙计们。我正在尝试创建一个与C#中的Regex一起使用的模式。

这是我的尝试:

"(value\":\[\[\"([A-Za-z0-9]+(?:-{0,1})[A-Za-z0-9]+)\"\]\])"

但是出于某种原因,当我去编译它时,我在括号上得到“无法识别的转义序列”。我不能简单地用\来逃避括号吗?

我正在搜索的字符串具有

的形式
value":[["AB-AB"]]

value":[["ABAB"]]

我想从结果中抓取组[1]。

2 个答案:

答案 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