C# 试图用反斜杠和引号正则化字符串

C# 试图用反斜杠和引号正则化字符串,c#,.net,regex,C#,.net,Regex,我正试图在csharp中正则化字符串。我希望传递以下格式的字符串: <%=Application(\"DisplayName\")%> 我使用regex类来完成以下任务: var text = "<%=Application(\"DisplayName\")%>"; Regex regex = new Regex(@"(<\%=Application[\>\(\)][\\][""](.*?)[\\][""][\>\(\)k]%\>)"); var

我正试图在csharp中正则化字符串。我希望传递以下格式的字符串:

<%=Application(\"DisplayName\")%>
我使用regex类来完成以下任务:

var text = "<%=Application(\"DisplayName\")%>";
Regex regex = new Regex(@"(<\%=Application[\>\(\)][\\][""](.*?)[\\][""][\>\(\)k]%\>)");
var v = regex.Match(text);
var s = v.Groups[1].ToString();
var text=”“;
正则表达式正则表达式=新正则表达式(@“(\(\)][\\][”“](.*?[\\][”“][\>\(\)k]%\>)”;
var v=regex.Match(文本);
var s=v.Groups[1].ToString();
我希望
s
包含输出字符串,但它返回为
”。我尝试一步一步地构建正则表达式字符串,但无法正确处理
\
。如有任何帮助,将不胜感激。谢谢!

var text=”“;
var text = "<%=Application(\"DisplayName\")%>";
Regex regex = new Regex(@"(<%=Application[>()][""](.*?)[""][>()k]%>)");
var v = regex.Match(text);
var s = v.Groups[1].ToString();
正则表达式正则表达式=新正则表达式(@“(()][”“]”(.*?[”“][>()k]]>)”; var v=regex.Match(文本); var s=v.Groups[1].ToString();
var text=”“;
正则表达式正则表达式=新正则表达式(@“(()][”“]”(.*?[”“][>()k]]>)”;
var v=regex.Match(文本);
var s=v.Groups[1].ToString();

您的模式非常接近。因为反斜杠实际上不是字符串的一部分,而只是在字符串中转义双引号,所以需要将它们从正则表达式模式中删除。请注意,我从两个双引号之前删除了
[\\]

现在,您希望
DisplayName
出现在
Group[1]
中。由于Regex将整个匹配项粘贴在
Group[0]
中,这使得您的外部捕获组(括号中的整个模式)成为第一个实际捕获组(实际上是
DisplayName
组[2])。为了获得最佳实践,我将外部捕获组更改为非捕获组,方法是在左括号中添加
?:
。这将忽略此完整组,并使
显示名称
组[1]
。希望这有帮助

完整测试代码:

var text = "<%=Application(\"DisplayName\")%>";
Regex regex = new Regex(@"(?:<\%=Application[\>\(\)][""](.*?)[""][\>\(\)k]%\>)");
var v = regex.Match(text);
var s = v.Groups[1].ToString();
var text=”“;
Regex Regex=new Regex(@“(?:\(\)][“”](.*?[“”][\>\(\)k]%\>)”;
var v=regex.Match(文本);
var s=v.Groups[1].ToString();

您的模式非常接近。因为反斜杠实际上不是字符串的一部分,而只是在字符串中转义双引号,所以需要将它们从正则表达式模式中删除。请注意,我从两个双引号之前删除了
[\\]

现在,您希望
DisplayName
出现在
Group[1]
中。由于Regex将整个匹配项粘贴在
Group[0]
中,这使得您的外部捕获组(括号中的整个模式)成为第一个实际捕获组(实际上是
DisplayName
组[2]
)。为了获得最佳实践,我将外部捕获组更改为非捕获组,方法是在左括号中添加
?:
。这将忽略此完整组,并使
显示名称
组[1]
。希望这有帮助

完整测试代码:

var text = "<%=Application(\"DisplayName\")%>";
Regex regex = new Regex(@"(?:<\%=Application[\>\(\)][""](.*?)[""][\>\(\)k]%\>)");
var v = regex.Match(text);
var s = v.Groups[1].ToString();
var text=”“;
Regex Regex=new Regex(@“(?:\(\)][“”](.*?[“”][\>\(\)k]%\>)”;
var v=regex.Match(文本);
var s=v.Groups[1].ToString();

实际的字符串
?很抱歉,我删除了引号。是后者。我编辑了这个问题。@EvanGertis我相信他是在问关于斜杠和
DisplayName
的周围引号的问题。实际的字符串
\“DisplayName”是吗\“
还是斜杠只是用来转义
文本中的双引号
字符串变量?您的实际输入是“DisplayName”还是“DisplayName”
?啊,我现在明白了。我刚刚在代码段中添加了变量文本。“现在有意义了吗?”伊万格蒂斯说,有。非常感谢。你真的很接近。我将在键入答案后发布答案。实际字符串
”也是如此。很抱歉,我删除了引号。是后者。我编辑了这个问题。@EvanGertis我想他是在问关于斜杠的问题,斜杠周围的引号是
DisplayName
。实际字符串是
\“DisplayName\”
还是斜杠只是用来转义
文本中的双引号?您的实际输入是“DisplayName”还是“DisplayName”
?啊,我现在明白了。我刚刚在代码段中添加了变量文本。“现在有意义了吗?”伊万格蒂斯说,有。非常感谢。你真的很接近。我会在打印出来后发布答案。非常感谢!极好的解决方案!非常感谢你!极好的解决方案!