正则表达式选择未用双引号括起来的分号

Viv*_*oel 5 regex

我有类似的字符串

a;b;"aaa;;;bccc";deef
Run Code Online (Sandbox Code Playgroud)

我想基于分隔符拆分字符串,;如果;不在双引号内.所以在分裂之后,它将是

 a
 b
"aaa;;;bccc"
 deef
Run Code Online (Sandbox Code Playgroud)

我尝试使用look-behind,但是我无法找到正确的正则表达式来进行拆分.

And*_*ark 9

正则表达式可能不是正确的工具.如果可能,您应该使用CSV库,指定;分隔符和"引号字符,这应该为您提供您要查找的确切字段.

这里所说的是一种方法,通过确保在;我们考虑字符串的分割和结束之间存在偶数个引号来起作用.

;(?=(([^"]*"){2})*[^"]*$)
Run Code Online (Sandbox Code Playgroud)

示例:http://www.rubular.com/r/RyLQyR8F19

例如,如果您可以在字符串中转义引号,则会出现故障a;"foo\"bar";c.

这是使用Python的csv模块的一个更清晰的例子:

import csv, StringIO
reader = csv.reader(StringIO.StringIO('a;b;"aaa;;;bccc";deef'),
                    delimiter=';', quotechar='"')
for row in reader:
    print '\n'.join(row)
Run Code Online (Sandbox Code Playgroud)