簡體   English   中英

換行符“\n\r”和數字的正則表達式

[英]Regex for newline "\n\r" and digits

我要匹配\r\n1.1

blabla \r\n1.1 Entrepreneurship und Untern

我嘗試了以下正則表達式:

"\r\n"\d\.\d\s+

它應該是什么樣子?

鏈接: https://regex101.com/r/wwN9SR/1

它應該是什么樣子?

如果您的字符串包含回車符和換行符

如果,當你在你的帖子中說bla \r\n1.1時,你的意思是這個字符串有一個回車符和一個換行符,總共有 9 個字符,那么你可以:

Regex.Match("blabla \r\n1.1 Entrepreneurship und Untern", "\r\n\\d\\.\\d\\s+");

(你不需要\\r\\n因為正則表達式引擎可以接收 CR LF 作為編譯器解釋 \r 和 \n 的實際字符,但編譯器不會感謝你把 \d 和\s 在非逐字字符串中,因為這些不是編譯器可以處理的已知轉義序列)

或者

Regex.Match("blabla \r\n1.1 Entrepreneurship und Untern", @"\r\n\d\.\d\s+");

在第二種形式中,接收\r並將其解釋為“回車”的是正則表達式引擎,而不是編譯器。 使用 @ 會關閉編譯器將它看到的任何\r轉換為回車符(char 13)的過程。 這意味着看到\r並將其解釋為“用戶正在尋找回車符”的是正則表達式引擎


如果您的字符串包含斜杠,r,斜杠,n 個字符

如果,當你在你的帖子中說bla \r\n1.1時,你的意思是這個字符串實際上有一個斜杠和一個 r,以及一個斜杠和一個 n,總共 11 個字符,那么你可以:

Regex.Match(@"blabla \r\n1.1 Entrepreneurship und Untern", "\\\\r\\\\n\\d\\.\\d\\s+");

您需要輸入\\\\r因為編譯器會將其轉換為\\r ,然后正則表達式引擎會將其轉換為\r ,即“字面斜線后跟字面 r”。

如果你只是做了\\\r ,編譯器會很高興並變成“反斜杠后跟回車”,那么正則表達式引擎將尋找“反斜杠后跟回車”而不是“反斜杠后跟 r”

如果您只是執行\\r ,編譯器會將其轉換為“反斜杠后跟 r”,但是當您“查找斜杠然后 r”時,正則表達式引擎會將其解釋為“尋找回車符”

或者

Regex.Match("blabla \r\n1.1 Entrepreneurship und Untern",  @"\\r\\n\d\.\d\s");

出於同樣的原因:使用 @ 字符串會停止編譯器將\\轉換為\\r轉換為(回車符),但是當正則表達式引擎進行解釋時,您仍然可以執行類似的轉換。 您需要確保正則表達式引擎在解釋之前看到\\r 如果它看到\r或(回車),它將在您尋找“斜線然后 r”時尋找回車


最后腳注:當您開發 C# 正則表達式時,regexstorm.net 使用 .NET 正則表達式引擎,並且通常是比基於非.net 正則表達式引擎的站點更好的測試站點

為了匹配

  • \r\n1
  • \r\n2.1
  • \r\n13.1.2

您應該轉義\. 字符,因為它們是保留字符正則表達式。 要轉義它們,請在它們之前添加一個\字符,因此您的正則表達式應類似於:

\\r\\n(\d+\.?)+

當將該正則表達式用於 c# 字符串文字時,您需要在字符串的開頭添加一個@字符以避免編譯器解釋\字符( \字符不僅在正則表達式引擎中保留,而且在 c# 字符串中保留)。

string myRegexExpression = @"\\r\\n(\d+\.?)+";

解釋,因為正則表達式從來都不容易理解。

  • \\r\\n匹配\r\n因為我們轉義了\字符
  • \d+匹配一個或多個數字
  • \.? 用於匹配可選的. 特點
  • (\d+\.?)+用於匹配重復的1.序列,類似於1 , 1.1 , 1.1.1

暫無
暫無

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

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