0

有没有办法,比如说一个正则表达式,甚至可以删除任何包含在两个连续引号中并被字母或数字包围的逗号?

不知道在这里还能做什么,这是我在查看 CSV Helpers 之前的最后希望:

我正在使用 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 方法显然不会捕获它。

有没有办法,比如说一个正则表达式,甚至可以删除任何包含在两个连续引号中并被字母或数字包围的逗号?

因此,如果数据看起来像这样:“Soccer Rocks,是的,它确实如此”或“Soccer Rocks 54,23 是的,它确实如此”,那么它最终将是这样的:“Soccer Rocks 是的,它确实如此”

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

4

1 回答 1

1

你的意思是这样的吗?

如果是,您应该使用 matcher 和 patern regex ("[\w\s]*),([\w\s]*"),并获得第一组和第二组,然后您将获得所需的内容。

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

然后你可以尝试这样的事情s.Replace("(?<="[\w\s]+),(?=[\w\s]+")","-"),所以你可以替换它而不需要组和匹配。

于 2013-08-03T07:29:56.657 回答