【问题标题】:Using String.Format to build Regular Expressions: "Input string was not in a correct format"使用 String.Format 构建正则表达式:“输入字符串的格式不正确”
【发布时间】:2011-03-07 11:53:30
【问题描述】:

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

我最初“硬编码”了我的 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(...)的限制吗?

感谢收看。

【问题讨论】:

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


    【解决方案1】:

    问题在于您不想标记格式说明符的{}。 IIRC,您只需将它们加倍:

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

    【讨论】:

    • 万岁。另一个约翰斯基特为我和我的问题提供了答案:-)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多