正则表达式在引号字符串中查找嵌入式引号

时间:2015-06-09 15:54:29

标签: c#

原始字符串:

  

11235485 | 56987 | 0 | 2010 | 05 |"这是我的样本   " text"" |" 01J400B" |"" | 1 |"示例"文字"第二个" |""示例文本编号   3"" |"" |"" |

所需字符串:

  

11235485 | 56987 | 0 | 2010 | 05 |"这是我的样本   ""文字""" |" 01J400B" |"" | 1 |"样本" "文本""第二个" |"""示例文本   第三,""" |"" |"" |

遗憾的是,所需的字符串是一个不受我控制的要求,所有嵌套的引号必须用引号限定(我知道)。

尝试我可能无法从原始字符串创建所需的字符串。

正则表达式匹配/替换似乎是要走的路,我需要帮助。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

我实际上拆分了字符串并评估每一部分:

public string Escape(string input)
{
    string[] pieces = input.Split('|');

    for (int i = 0; i < pieces.Length; i++)
    {
        string piece = pieces[i];

        if (piece.StartsWith("\"") && piece.EndsWith("\""))
        {
            pieces[i] = "\"" + piece.Trim('\"').Replace("\"", "\"\"") + "\"";
        }
    }

    return string.Join("|", pieces);
}

这是对输入的几个假设:

  • 项目由管道(|
  • 分隔
  • 项目格式正确,将以引号开头和结尾

如果您在引用的字符串中有|,这也会中断。

答案 1 :(得分:1)

您可以使用普通的string.Replace()方法。您知道|是启动该列的内容,因此您可以将所有"替换为"",然后将|""替换为{{1}来修复列的开始和结束}和|"""|

它看起来像这样:

"|

它并不漂亮,但它完成了工作。