请帮我解决我的问题。 我有一个以下字符串列表:
a
"b
c"
"ddd"
'ee'
a"b"c
a'b'c
因此我需要:
"a"
"b"
"c"
"ddd"
"ee"
"a\"b\"c"
"a'b'c"
请帮我写替换版。
答案 0 :(得分:3)
正如其他人在评论中已经注意到的那样:这不是正则表达式的工作。事实上,如果你尝试这样做,你将得到的代码 可读性和可操作性,而不是直截了当的想法。
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"
现在问问自己:从现在起一个月内你还能知道代码的作用吗?可能一年?
答案 1 :(得分:1)
不知道C#语法,但我认为你应该分三个简单的步骤。
对于每个字符串: - 剥离开始和结束报价(如果有的话)。 - 逃离字符串。 - 添加开始和结束报价。
应该易于实施。
答案 2 :(得分:1)
你应该手动完成。添加“在缓冲区中,跳过字符串中的第一个字符,如果"
或'
将每个非"
添加到缓冲区并引用每个"
(又名将其转换为\"
)。最后(不要添加引用"
,直到你有一个不同于"
的下一个字符),只需添加一个未引用的"
如果最后一个字符是"
或'
。
您可以使用2个正则表达式搜索和替换来执行此操作,但如上所述更有效。