【发布时间】:2014-06-17 21:39:12
【问题描述】:
全部 所以,我试图弄清楚如何为 Visual Basic.net 制作一个简单的正则表达式代码,但我一无所获。
我正在将 csv 文件解析为数组列表,但源 csv 绝不是原始文件。在足够多的地方有多余的/流氓引号会使程序崩溃,并且有足够多的引号使手动修复数据变得很麻烦。
我写了一堆错误检查,它在大约 99.99% 的时间里都有效。但是,每个文件夹要解析 10,000 行,这意味着每组 csv 文件平均出现一个错误。碰撞。为了正确解析最后的 0.01%,我创建了一个 If 语句,该语句将拉出具有奇数个引号的行并删除所有行,这会触发手动错误检查如果引号为零,则字段处理为通常。如果有偶数个引号,则标准拆分函数不能在没有正则表达式的情况下忽略引号之间的分隔符。
有人可以帮我找出一个忽略引号中的字段的正则表达式字符串吗?
这是到目前为止我能够想到的代码。
提前谢谢你
Using filereader1 As New Microsoft.VisualBasic.FileIO.TextFieldParser(files_(i),
System.Text.Encoding.Default) 'system text decoding adds odd characters
filereader1.TextFieldType = FieldType.Delimited
'filereader1.Delimiters = New String() {","}
filereader1.SetDelimiters(",")
filereader1.HasFieldsEnclosedInQuotes = True
For Each c As Char In whole_string
If c = """" Then cnt = cnt + 1
Next
If cnt = 0 Then 'no quotes
split_string = Split(whole_string, ",") 'split by commas
ElseIf cnt Mod 2 = 0 Then 'even number of quotes
split_string = Regex.Split(whole_string, "(?=(([^""]|.)*""([^""]|.)*"")*([^""]|.)*$)")
ElseIf cnt <> 0 Then 'odd number of quotes
whole_string = whole_string.Replace("""", " ") 'delete all quotes
split_string = Split(whole_string, ",") 'split by commas
End If
【问题讨论】:
-
请给我们一个具体的例子,说明您要忽略的内容,以及在什么情况下(在一行中等)如果您希望我看到您的消息,请在前面回复
@zx81. -
@zx81
输入线 ___________________________________________________________ LIST,410210,2-4,"PUMP, HYDRAULIC PISTON - MAIN",1,,, _________________ ______________________________________________________ 所需的输出线(在管道处分隔) _________________________ LIST| 410210|2-4|“泵,液压活塞 - 主”|1||| ______________ ________________________________________________________ 电流输出线(在管道处分隔) _____________________________ LIST|410210|2-4|“泵| 液压活塞 - 主”|1||| -
感谢您的澄清。发布了两个选项,让我知道它们是如何工作的。 :)