簡體   English   中英

C#中是否有無需修改即可使用的正則表達式雙引號匹配語法?

[英]Is there a regex double-quote matching syntax that can be used without modification in C#?

以下簡單的正則表達式包含四個必須匹配的雙引號。 我並沒有試圖為這個特定的正則表達式提出解決方案,而只是將其用作一般示例:

\s*"Hello"\s*"world"\s*

在編寫包含必須匹配雙引號的正則表達式的 C# 代碼時,我一直遇到的問題是我不得不使用的繁瑣語法,因為 C# 中的字符串文字是雙引號分隔的。 我使用了以下兩種不同的技術,我都不喜歡這兩種技術。 除了將原始正則表達式轉換為可接受的 C# 語法所需的額外復雜性之外,將該語法轉換回原始正則表達式以進行額外開發是一個真正的痛苦。 正則表達式引擎和 C# 語言解析器是否同樣可以接受任何形式?

第一個 hack 使用轉義字符來轉義必須出現在正則表達式中的反斜杠和雙引號。 我認為這是最容易出錯的方法,因為您會陷入更復雜的正則表達式的反斜杠中:

"\\s*\"Hello\"\\s*\"world\"\\s*"

第二個 hack 將原始正則表達式分成多個部分並將它們連接起來。 字符串文字和包含正則表達式反斜杠的部分前面有一個 @ 字符,以使反斜杠按字面意思而不是作為轉義字符。 我認為這比以前的方法更冗長但更不容易出錯:

@"\s*" + '"' + "Hello" + '"' + @"\s*" + '"' + "world" + '"' + @"\s*"

@"\s*""Hello""\s*""world""\s*"給出字符串\s*"Hello"\s*"world"\s* 只需將@前置字符串(AKA 逐字字符串)中的雙引號加倍以顯示雙引號

小提琴

我發現通過使用十六進制轉義序列 \x22 來表示雙引號,可以在我的正則表達式開發應用程序 (RegexBuddy) 和 C# 字符串文字中原樣使用相同的正則表達式字符串。 也就是說,在我的開發應用程序中

\s*"Hello"\s*"world"\s*

可以直接表示為

\s*\x22Hello\x22\s*\x22world\x22\s*

在 C# 字符串文字中,它可以表示為相同的正則表達式字符串

@"\s*\x22Hello\x22\s*\x22world\x22\s*"

字符串仍然雜亂無章,但至少不需要更改。

暫無
暫無

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

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