使用String.Format构建正则表达式:“输入字符串的格式不正确”

时间:2011-03-07 11:53:30

标签: c# asp.net regex string.format

我正在构建来自模板的文档引擎。在某些时候,我需要在Reg Exp组上进行匹配,并将模板文本替换为db中的内容。

我最初硬编码'我的RegExp,做了类似的事情:

Regex r = new Regex(@"{DocSectionToggle::(?<ColumnName>\w+)::(?<ResponseValue>.+)}\n\[\[(?<SectionContent>.+)\]\]", RegexOptions.Multiline);

道歉:它会进行群组捕获,因此语法不是最漂亮的。

只是为了让事情变得更整洁,因为我想'保持web.config或其他地方的模式,我''''''''''''''''''''''''''''''''''''''

string _regexp_DocSectionToggle = @"{DocSectionToggle::{0}::{1}}\n\[\[{2}\]\]";

/* Reg Exp Patterns for group capture */

string _rxCol            = @"(?<{ColumnName}>\w+)";
string _rxResp           = @"(?<{ResponseValue}>.+)";
string _rxSectContent    = @"(?<{SectionContent}>.+)"; 

Regex r = new Regex( string.Format(_regexp_DocSectionToggle,
                                    _rxCol,
                                    _rxResp,
                                    _rxSectContent), 

                      RegexOptions.Multiline
                   );

但是我收到一个错误:'输入字符串的格式不正确'。

谁能告诉我为什么?这是string.Format(...)的限制吗?

感谢您的光临。

2 个答案:

答案 0 :(得分:5)

问题是您想要标记格式说明符的{}。 IIRC,你只需加倍:

string _regexp_DocSectionToggle = @"{{DocSectionToggle::{0}::{1}}}\n\[\[{2}\]\]";

答案 1 :(得分:2)

您需要使用{}转义{{}},如下所示:

string _regexp_DocSectionToggle = @"{{DocSectionToggle::{0}::{1}}}\n\[\[{2}\]\]";