c# - 拆分字符串并忽略引号内的定界符

标签 c# .net regex vb.net csv

我正在使用 .NET 的 String.Split 方法使用逗号拆分字符串,但我想忽略用双引号引起来的字符串。我读过一个

例如下面的字符串。

Fruit,10,"Bananas, Oranges, Grapes"

我想得到以下内容

Fruit
10
"Bananas, Oranges, Grapes"

目前我得到以下输出

Fruit
10
"Bananas
 Oranges
 Grapes"
enter code here

在遵循建议和提供的答案之后,这里是我最终得到的示例。 (这显然对我有用)

Imports Microsoft.VisualBasic.FileIO

Dim fileReader As New TextFieldParser(fileName)

fileReader.TextFieldType = FieldType.Delimited
fileReader.SetDelimiters(",")
fileReader.HasFieldsEnclosedInQuotes = True

While fileReader.EndOfData = False


Dim columnData() As String = fileReader.ReadFields

' Processing of field data

End While

最佳答案

你最好使用解析器,就像评论中提到的那样。也就是说,可以通过以下方式使用正则表达式来实现:

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

正向前看 ((?= ... )) 确保在逗号之前有偶数个引号来分割(即它们要么成对出现,要么没有).

[^"]* 匹配非引号字符。

关于c# - 拆分字符串并忽略引号内的定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21261314/

相关文章:

regex - 编辑两个正则表达式之间的距离

Python 正则表达式(在一个字符串中搜索多个值)

c# - C# 中的 RC4 128 位加密

.NET 4 自旋锁

c# - 如何在 Media.AfterSave 事件处理程序中获取当前的 Umbraco 用户?

c# - unity3d 字典的无效转换异常

.net - 如何在 C# 中使用枚举来存储字符串常量?

javascript - 正则表达式意外字符

javascript - 当从客户端向服务器发送信息时,我是否在客户端或服务器端(或两者)强制执行规则?

c# - 如何在 VS2008(自动属性)中使用 "short style"属性设置默认值?