1

我必须在 VB.NET 中解析一个字符串,它具有以下结构

  1. 由新行分隔的记录
  2. 每条记录的固定字段数,用逗号分隔
  3. 字段可以被引用(字符串)或不被引用(其他类型的数据 - 日期、整数等)
  4. 注释字段(字符串)可以包含换行符和逗号

因此,由于第 4 点,如果在奇数和偶数引号之间(例如,如果在引号 1 和 2 之间,它们在注释字段中并且必须被忽略,但如果在引号 2 之间,则必须忽略逗号和新行作为字段/记录分隔符) 3,它们是字段/记录分隔符。

我可以为此编写手动解析代码,但认为正则表达式可能更可靠。但我对正则表达式的经验非常有限。

示例字符串

(记录1)

10,"测试",10.1,,,"123"

(记录2)

20,"测试,有逗号
和换行",,2.1,,"aaa"

所以实际的字符串是

10,"Test",10.1,,,"123"
20,"Test, 有逗号
和换行",,2.1,,"aaa"


编辑:
我需要添加更多说明:

1. 记录可以有更多或更少的 4 个字段
2. 字段可以为空

所以一个实际的测试输入字符串可以是

10,"Test",10.1,,,"123"
20,"Test, 有逗号
和换行",,2.1,,"aaa"

所以显然问题应该分为两部分:

  1. 提取记录(新行不在引号之间)
  2. 对于每条记录,提取字段(用逗号分隔,不在引号之间)

我应该如何拆分正则表达式(或有两个正则表达式)来匹配这个?

谢谢

4

1 回答 1

1

我不知道如何消除每个字段的表达式的冗余,但根据此测试,以下内容似乎适用于您的示例:

("[^"]*"|[^",\n]+),("[^"]*"|[^",\n]+),("[^"]*"|[^",\n]+),("[^"]*"|[^",\n]+)

如果您使用重复组,则匹配只会保留到最后一个实例。如果有人知道如何解决这种重复,我会很感兴趣。

更新:如果您了解每个位置字段的类型(例如,是否是带引号的字符串、整数、浮点数等),您当然可以相应地调整正则表达式。

于 2013-06-24T16:23:06.860 回答