【问题标题】:RegEx to replace value including new lines正则表达式替换值,包括新行
【发布时间】:2008-11-11 14:17:11
【问题描述】:

我有一个如下图所示的 sn-p。

string bodyTypeAssemblyQualifiedName = "XXX.XX.XI.CustomerPayment.Schemas.r1.CustomerPayments_v01, XXX.XX.XI.CustomerPaym" +
                "ent.Schemas.r1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ac564f277cd4488" +
                "e";

我想在 C# 中使用正则表达式来得到它:

string bodyTypeAssemblyQualifiedName = null;

我尝试过使用如下所示的 RegEx,但它与换行符不匹配...

bodyTypeAssemblyQualifiedName\s=\s(?<location>.*?);

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    这行得通:

    (?

    相当于:

    1. 在字符串“字符串”之后 bodyTypeAssemblyQualifiedName = "
    2. 打开单行(将 \r\n 视为 任何其他字符)(这就是 (?s: ) 确实)
    3. 匹配每个不是分号的字符
    4. 直到到达一个分号

    【讨论】:

      【解决方案2】:

      @Will,通过用否定字符类替换点,您消除了对单行修饰符的需要。如果我没看错,你也不需要使用环视。

      bodyTypeAssemblyQualifiedName\s+=\s+(?<location>[^;]+);
      

      【讨论】:

      • 我的正则表达式不需要你使用除 Regex.Replace(input, pattern, replacement) 之外的任何代码。
      【解决方案3】:

      你可以试试

      bodyTypeAssemblyQualifiedName\s=\s(?<location>[.\n]*?);
      

      或者你为你的模式设置RegexOptions.Singleline

      RegexOptions.Singleline - 指定单行模式。更改点 (.) 的含义,使其匹配每个字符(而不是除 \n 之外的每个字符)。

      【讨论】:

        猜你喜欢
        • 2013-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-07
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        相关资源
        最近更新 更多