簡體   English   中英

正則表達式-無法識別的轉義序列

[英]regex - unrecognized escape sequence

來自: https : //stackoverflow.com/a/959982/101055

我正在嘗試使用:

using System.Text.RegularExpressions;

Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("goodName1", "asdf");
parameters.Add("goodName2", "qwerty");
string text = "this is my {goodName1} template {goodName2} string";
text = Regex.Replace(text, "\{(.+?)\}", m => parameters[m.Groups[1].Value]);

我在{}上的\\{(.+?)\\}上遇到2個構建錯誤。

錯誤>無法識別的轉義序列

怎么了

嘗試:

text = Regex.Replace(text, @"\{(.+?)\}", m => parameters[m.Groups[1].Value]);

一些細節。

@符號定義了Verbatim字符串文字。 這基本上說了是告訴編譯器引號中的字符串不會轉義。 http://msdn.microsoft.com/zh-CN/library/aa691090(v=vs.71).aspx

您也可以選擇在反斜杠上加倍。 例如:

text = Regex.Replace(text, "\\{(.+?)\\}", m => parameters[m.Groups[1].Value]);

但是,恕我直言,@符號更具可讀性。

您需要對\\字符進行兩次轉義,以使它們成為字符串中的\\文字,而不用作字符串級轉義序列。

"\\{(.+?)\\}"

在字符串中,其值為\\{(.+?)\\}

或者,您可以使用@""文字:

@"\{(.+?)\}"

具有相同的值。


當需要在字符串中添加換行符時,可以使用轉義序列"\\n" 字符串文字使用\\作為轉義字符,以幫助編碼標准鍵盤上不存在的字符,否則將很難放置在字符串中。 正則表達式要求使用相同的\\字符來轉義模式中的特殊字符。 這意味着必須將\\字符轉義以用作字符串中的文字值,即\\\\

您可以添加一個@來轉義整個字符串,也可以添加一個雙斜杠\\\\來避免每次出現。

這是一篇關於字符串並從MSDN轉義的好文章

文章中的一個示例:

@"c:\Docs\Source\a.txt"  // rather than "c:\\Docs\\Source\\a.txt"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM