2012-06-05 130 views
2

之间返回字符串我试图使用C#两个标签

var added = Regex.Match(Text, 
"\[BEGINTAG\](.+?)\[\/ENDTAG\]",RegexOptions.None); 

返回标签[BEGINTAG]和[/ ENDTAG]文本字符串之间的字符串。我无法弄清楚我的正则表达式常量有什么问题。

回答

2

你的正则表达式很好。你只需要提取1组(你括号之间不匹配的东西)

在C#这成为

Regex regexObj = new Regex(@"\[BEGINTAG\](.+?)\[/ENDTAG\]"); 
resultString = regexObj.Match(subjectString).Groups[1].Value; 

让我知道这是否正常工作

此外,仅供参考,您不需要和你一样逃脱。这也不错:

\[BEGINTAG](.+?)\[/ENDTAG] 
+0

如果您对性能感兴趣,很高兴知道\ [BEGINTAG]([^ [] *)\ [/ ENDTAG]不需要任何回溯,预计效果会更好。 – buckley

+0

谢谢,工作完美。 – Subliminy

0

一个可能的问题是,你没有你的字符串前@,所以C#是治疗\字符作为C#逃逸,而不是正则表达式逃逸。

Buckley的回答显示如何用@作为字符串的前缀,以便将\作为正则表达式转义处理。在C#中使用这种格式的正则表达式几乎总是更好。否则,你会得到这样的结果。

var added = Regex.Match(Text, 
    "\\[BEGINTAG\\](.+?)\\]\\/ENDTAG\\]", RegexOptions.None); 

我发现很难读。