簡體   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