如何在双引号内部删除双引号

4

我有一个问题,不知道该怎么办。

问题:我需要删除双引号内部的双引号


字符串示例:

"MIKE YANICK","412 A AVE "E"," ","NADIEN PA"," ","190445468"

正如您所看到的,“412 A AVE “E””中的字母E有一个额外的双引号。


我需要将其删除。

这是我的预期结果:

"MIKE YANICK","412 A AVE E"," ","NADIEN PA"," ","190445468"


  • 我不能使用表达式,因为模式每次都会更改。
  • string.replace不起作用,因为您需要硬编码值
  • 读取双引号之间的值不起作用,因为它会被中间的引号扔掉

请帮忙...


2
你能在源代码中修复它吗?这段文本是如何生成的? - Forgotten Semicolon
我们无法修复源代码。它来自第三方... - Internet Engineer
2
我无法使用表达式,因为模式每次都会变化。这是什么意思?如果“模式每次都会变化”,你怎么可能指望修复它呢? - Matt Burland
@InternetEngineer,你应该与第三方沟通,因为他们的格式有问题。在一个文本引用、逗号分隔的文件中,作为文本意义的引号应该被转义。 - Forgotten Semicolon
是的,双引号的位置总是在变化。有时它距离结束双引号差2个字符,有时它在完全中间。我不知道如何解决这个问题,但我愿意寻求帮助。 - Internet Engineer
4个回答

5
您可以使用这样的正则表达式:
(?<!(^|,))"(?!(,|$))

这将匹配任何双引号 ("),但不包括字符串的开头或逗号,并且其后也不跟随逗号或字符串的结尾。

3
这个与您的示例相符:

这个与您的示例相符:

Regex.Replace("\"MIKE YANICK\",\"412 A AVE \"E\",\" \",\"NADIEN PA\",\" \",\"190445468\"",
    "(?<=\")([^,]*)(?=\")",
    m => m.Value.Replace("\"", string.Empty)) ;

输出:

"MIKE YANICK","412 A AVE E"," ","NADIEN PA"," ","190445468"

0

那就只用replace怎么样?

像这样:

string test = "\"MIKE YANICK\",\"412 A AVE \"E\",\" \",\"NADIEN PA\",\" \",\"190445468\"";
string[] fields = test.Split(new char[] {','});
StringBuilder result = new StringBuilder();
bool first = true;

foreach (var field in fields)
{
    if(first)
    {
        first = false;
    }
    else
    {
            result.Append(",");
    }

    result.AppendFormat("\"{0}\"", field.Replace("\"",""));
}

Console.WriteLine (string.Format("Old : {0} New: {1}", test,result.ToString()));

0
我会查找","。如果引号不紧挨着逗号,就删除引号。

除此之外,您可能希望首先删除所有在 ", 之间的空格。 - NotMe
1
除了需要考虑字符串的开头和结尾不紧挨着逗号之外,其他都要考虑。 - Matt Burland
是的,在某些情况下可能有效,但并非所有情况都适用。有时候双引号会导致结束双引号失效。 - Internet Engineer
@InternetEngineer:那是什么意思?如果多余的双引号在闭合引号之后,即您的字符串为"",",那么为什么不将第二个"视为闭合引号,将第一个视为错误的引号? - Matt Burland
如果 "" 在第一个或最后一个索引中,请不要删除它。 - DJ Burb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接