繁体   English   中英

正则表达式失败“无法识别的转义序列”

[英]Regex Failing “Unrecognized Escape sequence”

module107应该与示例文本Module ID="107"相匹配

您可以帮助我了解代码中的错误之处吗?

var module107 = Regex("\A*Module\sID=\"107\"");

错误:无法识别的转义序列

这里的问题是,您想逃避两个不同的级别。 \\A是正则表达式的转义序列。 但是问题是,首先有一个试图解释转义序列的字符串,并且该字符串不知道转义序列\\A\\s (我不知道)。

可能有两种解决方案:

  1. 如果要转义正则表达式,请将\\翻倍。 所以

     var module107 = Regex("\\\\A*Module\\\\sID=\\"107\\""); 

    是字符串,并且在处理完字符串后,正则表达式为\\A*Module\\sID="107"

  2. 使用逐字字符串。 如果在字符串之前添加@ ,则字符串不会评估转义序列。 因此Regex(@"\\A*Module\\sID=")将以regex \\A*Module\\sID=

    但是现在您在正则表达式中想要使用"遇到了问题。您可以通过将其加倍来在逐字字符串中添加"

     var module107 = Regex(@"\\A*Module\\sID=""107"""); 

描述

这将匹配模块id =“ 107”,其中数字是用双引号引起来的任意数量的数字。 我用[""]更改了转义的引号,以便可以将它们嵌套到字符串中。 我正在使用\\b ,它将查找单词break并允许字符串出现在输入中的任何位置。 但是,如果要验证特定的文本,则可以使用\\A^来表示字符串的开头。

\\b(Module\\s+ID=[""](\\d{1,})[""])

在此处输入图片说明

团体

组0将捕获整个字符串

  1. 将从模块获得第二个报价
  2. 将获得引号内的值

C#代码示例:

using System;
using System.Text.RegularExpressions;
namespace myapp
{
  class Class1
    {
      static void Main(string[] args)
        {
          String sourcestring = "for Module ID=""107"" Can you h";
          Regex re = new Regex(@"\b(Module\s+ID=[""](\d{1,})[""])",RegexOptions.IgnoreCase);
          MatchCollection mc = re.Matches(sourcestring);
          int mIdx=0;
          foreach (Match m in mc)
           {
            for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
              {
                Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
              }
            mIdx++;
          }
        }
    }
}

$matches Array:
(
    [0] => Array
        (
            [0] => Module ID="107"
        )

    [1] => Array
        (
            [0] => Module ID="107"
        )

    [2] => Array
        (
            [0] => 107
        )

)

关键是要先将您键入的文本解释为字符串,然后再解释为正则表达式。 字符串解释还会查看'\\',并在其解释中使用它们。

正如Tyanna所说,这意味着您需要转义那些“ \\”,以免在读取字符串或混淆字符串解析器时它们不会被“用完”。

您可能想尝试的另一种方法是使用字符串文字。 使用Regexes时,这可能会更干净一些,因为您不会以很多斜杠结尾(有时只用双引号引起来):

var module107 = new Regex(@"\A*Module\sID=""107""");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM