正则表达式,用于解析分隔的限定字符串

时间:2016-02-01 04:33:45

标签: regex csv

我被要求使用正则表达式来解析使用.NET的分隔字符串。分隔字符串也可能具有双引号限定内容。

我想出了以下表达式:

(?<=^|\,)(.*?)(?=\,|$)

感觉它几乎就在那里。针对以下测试数据运行此表达式:

,test 1, "{test""100,000.0"" 2}", test 3,

的产率:

<empty>
test 1
"{test""100
000.0"" 2}"
test 3
<empty>

因此,除了双引号限定内容外,它看起来有效。

我找到了搜索并尝试了其他一些建议,但没有找到任何有效的方法。

我没有抓住它们,但是如果它更容易包含分隔符和限定符就可以了。

3 个答案:

答案 0 :(得分:1)

此正则表达式捕获您的目标字词:

(?<=^|,)((?:,(?!(?:(?:[^"]*"){2})*[^"]*$)|[^,])*)

live demo,显示捕获:

<empty>
test 1
"{test""100,000.0"" 2}"
test 3
<empty>

这会捕获非逗号或逗号(使用前瞻),后跟偶数引号数(引号内的逗号后跟奇数号引号)。

答案 1 :(得分:0)

您可以使用正则表达式来否定&#39;,&#39;并在连续的&#39;,#39;之间提取字符串。

您可以使用表达式&#34;([^,] *)&#34;。

我在https://regex101.com/

中验证了相同内容

答案 2 :(得分:0)

你可以简单地用这个分开

i

参见演示。

https://regex101.com/r/yX8zV8/1

如果你想捕捉使用

,(?=(?:[^"]*"[^"]*")*[^"]*$)

参见演示。

https://regex101.com/r/yX8zV8/2