[英]Regex for newline "\n\r" and digits
我要匹配\r\n1.1
blabla \r\n1.1 Entrepreneurship und Untern
我嘗試了以下正則表達式:
"\r\n"\d\.\d\s+
它應該是什么樣子?
它應該是什么樣子?
如果,當你在你的帖子中說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
並將其解釋為“用戶正在尋找回車符”的是正則表達式引擎
如果,當你在你的帖子中說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.