3

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

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


字符串示例:

"迈克·雅尼克","412 A AVE "E",","NADIEN PA",","190445468"

如您所见,"412 A AVE "E" 中的字母 E 有一个额外的双引号。


我需要删除它。

这是我的结果应该是:

"迈克·雅尼克","412 A AVE E",","纳迪恩 PA","","190445468"


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

请帮忙...

4

4 回答 4

4

你可以使用这样的正则表达式:

(?<!(^|,))"(?!(,|$))

这将匹配任何"没有以字符串开头或逗号开头且后面没有逗号或字符串结尾的双引号 ( )。

于 2013-03-18T19:54:11.427 回答
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"
于 2013-03-18T20:01:50.680 回答
0

只使用替换呢?

就像是:

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()));
于 2013-03-18T20:02:14.287 回答
0

我要做的是,寻找",. 如果引号不在逗号旁边,请删除引号。

于 2013-03-18T19:54:19.303 回答