有没有办法,比如一个正则表达式,即使是删除用两个连续引号括起来并用字母或数字包围的逗号?
不确定这里还有什么可做的,这是我在观察CSV助手之前的最后希望:
我正在使用Visual Studio SSIS / BI将文本文件导入数据库。问题是,如果文件包含这样的数据,SSIS将会阻塞:
“足球晃动,是的”
为了解决这个问题,我使用了一种暂时解决问题的替换方法。
我在Visual Studio BI / SSIS Script task
中运行此代码,以便在将文本文件发送到数据库之前将其处理为CSV。
static void AddComma(string s, TextWriter writer)
{
foreach (var line in s.Replace(", ", "").Split(new string[] { Environment.NewLine}, StringSplitOptions.None))
{
foreach (var t in line)
{
writer.Write(t);
}
writer.WriteLine();
}
writer.Flush();
}
static void Main(string[] args)
{
TextReader reader = new StreamReader(@"C:\sample\test.txt");
string a = reader.ReadToEnd();
reader.Close();
FileStream aFile = new FileStream(@"C:\sample\test.csv", FileMode.Create);
AddComma(a, new StreamWriter(aFile));
aFile.Close();
}
注意:我正在替换逗号后跟一个空格
Replace(", ", "");
问题是文本文件中的数据是这样的:
“足球晃动,是的”
显然,Replace方法无法捕获它。
有没有办法,比如一个正则表达式,即使是删除用两个连续引号括起来并用字母或数字包围的逗号?
所以,如果数据看起来像这样:“足球晃动,是的确如此”或“足球晃动54,23是的确如此”然后它会像这样结束:“足球晃动是的吗”
我不确定什么是可能的,只是寻找某种解决方案。
答案 0 :(得分:1)
你的意思是this吗?
如果是的话,你应该使用匹配正面正则表达式("[\w\s]*),([\w\s]*")
的匹配器,并获得第一组和第二组,然后你将得到你需要的东西。
如果你使用c#,这意味着你使用.net引擎正则表达式,那么你可以使用无限重复的lookbehind。
您可以尝试使用s.Replace("(?<="[\w\s]+),(?=[\w\s]+")","-")
这样的内容,这样您就可以替换它而无需获得组和匹配。