从直接字母或数字或除引号之外的任何内容之间删除逗号?

时间:2013-08-03 07:20:33

标签: c# regex

有没有办法,比如一个正则表达式,即使是删除用两个连续引号括起来并用字母或数字包围的逗号?

不确定这里还有什么可做的,这是我在观察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是的确如此”然后它会像这样结束:“足球晃动是的吗”

我不确定什么是可能的,只是寻找某种解决方案。

1 个答案:

答案 0 :(得分:1)

你的意思是this吗?

如果是的话,你应该使用匹配正面正则表达式("[\w\s]*),([\w\s]*")的匹配器,并获得第一组和第二组,然后你将得到你需要的东西。

如果你使用c#,这意味着你使用.net引擎正则表达式,那么你可以使用无限重复的lookbehind。

您可以尝试使用s.Replace("(?<="[\w\s]+),(?=[\w\s]+")","-")这样的内容,这样您就可以替换它而无需获得组和匹配。