正则表达式匹配嵌入另一个带引号的字符串中的带引号的字符串

时间:2012-11-27 16:44:15

标签: c# regex

我有一个逗号分隔的数据源,并且引用限定。一张CSV。但是,数据源提供程序有时会做一些不稳定的事情。我已经补偿了除了其中一个之外的所有人(我们逐行阅读文件,然后在清理后将其写回来),我正在寻找解决最后剩下的问题,当我的正则表达式相当弱

将引用字符串与另一个引用字符串匹配

所以这是我们的示例字符串......

"foobar", 356, "Lieu-dit "chez Métral", Chilly, FR", "-1,000.09", 467, "barfoo", 1,345,456,235,231, "935.18"

我希望匹配子串“chezMétral”,以便用子串chezMétral替换它。理想情况下,尽可能少的代码行。最后的目标是将线路写回(或将其作为方法返回值返回),替换已经完成。

所以我们的示例字符串最终会变成......

"foobar", 356, "Lieu-dit chez Métral, Chilly, FR", "-1,000.09", 467, "barfoo", 1,345,456,235,231, "935.18"

我知道我可以定义一个模式,例如(?<quotedstring>\"\w+[^,]+\")来匹配引用的字符串,但我的正则表达式很弱(数据库开发人员,几乎从不使用C#),所以我不确定如何匹配另一个引用的命名组 quotedstring 中的字符串。


FYI:对于那些注意到用逗号格式化但没有引用限定的大整数的人来说,已经处理过了。随机使用行分隔符(有时是CR,有时是LF)。其他问题......

1 个答案:

答案 0 :(得分:4)

替换为此regex

(?<!,\s*|^)"([^",]*)"

现在将其替换为$1

试试here


使用"转义""它将成为

(?<!,\s*|^)""([^"",]*)""