我正在尝试将字符串中的键 INPUT_CSV 的所有实例替换为文件路径,该文件路径保证其中没有任何单引号或双引号(或路径的其他不安全字符) 。但是,此文件路径将被双引号括起来。
输入字符串中的键可能被双引号,单引号或根本没有引号括起来。我希望尽可能灵活,并使用相同的双引号文件路径替换所有这些实例。
这就是我目前的做法:
Dim doubleQuotedCsvFilePath As String = """" & generatedCsvFilePath & """"
scriptStr = scriptStr.Replace("""INPUT_CSV""", doubleQuotedCsvFilePath)
scriptStr = scriptStr.Replace("'INPUT_CSV'", doubleQuotedCsvFilePath)
scriptStr = scriptStr.Replace("INPUT_CSV", doubleQuotedCsvFilePath)
是否有某种漂亮的正则表达式(或可能是其他一些方法)可以基本上更简洁地做到这一点?如果这是最好的方法,那我也很好 - 只是想知道是否有更好的方法。谢谢!
P.S。不是必需的,但如果有一些方法可以使正则表达式不区分大小写(例如“input_csv”,'input_CSV',或 INPut_CSV < / strong>全部被替换),那也很棒。谢谢!
答案 0 :(得分:2)
您可以使用反向引用来匹配第一个引用:
string scriptStr= "'INPUT_CSV'";
string pattern = @"(""|'?)INPUT_CSV\1";
Regex rgx = new Regex(pattern);
scriptStr = rgx.Replace(scriptStr, doubleQuotedCsvFilePath);
请参阅https://msdn.microsoft.com/en-us/library/thwdfzxy%28v=vs.110%29.aspx
答案 1 :(得分:2)
这是我的尝试:
(?i)(['""]?)input_csv\1
(?i)
启用不区分大小写的搜索,然后我们将可选单引号或双引号捕获到捕获组中,匹配input_csv
字符串,然后检查是否存在与开幕词相同的结束语。
VB.NET:
Dim doubleQuotedCsvFilePath As String = """" & "InPuT_CsV" & """"
Dim scriptStr As String
Dim m As Regex = New Regex("(?i)(['""]?)input_csv\1")
scriptStr = m.Replace(doubleQuotedCsvFilePath, "$1INPUT_CSV$1")
C#:
var doubleQuotedCsvFilePath = "\"InPuT_CsV\"";
var scriptStr = string.Empty;
var m = new Regex(@"(?i)(['""]?)input_csv\1");
scriptStr = m.Replace(doubleQuotedCsvFilePath, "$1INPUT_CSV$1");
输出:
"INPUT_CSV"
免责声明:只有在您不使用CSV解析器重新发明轮子时才使用它。