請幫我解決我的問題。 我有以下字符串列表:需要正則表達式來關閉或替換引號
a
"b
c"
"ddd"
'ee'
a"b"c
a'b'c
結果我需要:
"a"
"b"
"c"
"ddd"
"ee"
"a\"b\"c"
"a'b'c"
請幫我寫的替換模式。
請幫我解決我的問題。 我有以下字符串列表:需要正則表達式來關閉或替換引號
a
"b
c"
"ddd"
'ee'
a"b"c
a'b'c
結果我需要:
"a"
"b"
"c"
"ddd"
"ee"
"a\"b\"c"
"a'b'c"
請幫我寫的替換模式。
不知道C#語法,但我認爲你應該通過三個簡單的步驟來分割它。
對於每個字符串: - 剝離開始和結束報價(如果有的話)。 - 轉義字符串。 - 添加開始和結束報價。
應該很容易實現。
正如其他人已經在評論中指出的那樣:這不是正則表達式的工作。事實上,如果你嘗試這樣做,你會得到的代碼是,而不是簡單的想法,可讀性和可維護性要低於。
string.Concat("\"", myString.Trim('"', '\'').Replace("\"","\\\""), "\"");
PowerShell的測試:
PS Home:\> filter fixString { '"' + $_.Trim('"', "'").Replace('"', '\"') + '"' }
PS Home:\> 'a','"b','c"','"ddd"',"'ee'",'a"b"c',"a'b'c" | fixString
"a"
"b"
"c"
"ddd"
"ee"
"a\"b\"c"
"a'b'c"
但是,如果你迫切需要的正則表達式,我能想到的只有以下三個單獨更換的:
myString = Regex.Replace(myString, @"^['""]|['""]$", "");
myString = Regex.Replace(myString, @"""", @"\""");
myString = Regex.Replace(myString, "^|$", @"""");
PowerShell的測試:
PS Home:\> 'a','"b','c"','"ddd"',"'ee'",'a"b"c',"a'b'c" |
>> % { $_ -replace '^[''"]|[''"]$' -replace '"','\"' -replace '^|$','"' }
"a"
"b"
"c"
"ddd"
"ee"
"a\"b\"c"
"a'b'c"
只有兩個正則表達式下面的作品,感謝Toader Mihai Claudiu誰提供了一些重要的建議:
myString = Regex.Replace(@"^['""]?(.*?)['""]?$", @"""$1""");
myString = Regex.Replace(@"(?<=.)""(?=.)", @"\""");
PowerShell的測試:
PS Home:\> 'a','"b','c"','"ddd"',"'ee'",'a"b"c',"a'b'c" |
>> % { $_ -replace '^[''"]?(.*?)[''"]?$','"$1"' -replace '(?<=.)"(?=.)','\"' }
"a"
"b"
"c"
"ddd"
"ee"
"a\"b\"c"
"a'b'c"
現在問自己:你還會知道代碼做的是什麼一個月後?一年也許?
你應該手動做。在緩衝區中添加一個「,跳過字符串中的第一個字符,如果"
或'
加入每個非"
,因爲它是緩衝區並引用每個"
(也就是將其轉換爲\"
)。最後(不要加引號"
直到你有下一個字符比"
不同)只需添加引用"
非,如果最後一個字符是"
或'
。
你可以也許2正則表達式搜索做到這一點和替換,但它更有效地做到這一點如上
KISS修剪'結束'然後做一個簡單的字符串替換```。最後把它包裝在`「...」中。 – leppie 2011-01-13 13:23:24
它是否必須是RegEx?看起來像使用常規字符串操作很簡單。 – Oded 2011-01-13 13:23:37
太慢@Oded; P(全部13秒) – leppie 2011-01-13 13:24:16