使用正则表达式分割字符串,但忽略引号内的分隔符,并且分隔符应该是动态的

时间:2019-02-04 06:40:37

标签: python regex

我正在使用以下正则表达式表达式来拆分字符串中的分隔符,但忽略引号内的分隔符

re.split('''[|,](?=(?:[^'"]|'[^']*'|"[^"]*")*$)'', data) 

但是我手动声明的分隔符应该是动态的,我将如何在上述regex表达式中使用一个变量,而不是在regex表达式本身中指定分隔符

data="\"john\"|\"100032487\"|\"ab|cdef\"|\"ghijkl\""
output = re.split('''[|,](?=(?:[^'"]|'[^']*'|"[^"]*")*$)'', data)

我应该将这些定界符分配给变量,而不是[|,],并在上面的正则表达式中使用该变量

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试使用正则表达式来解析CSV样式的数据。 Python csv库可以解析它。

例如以下方法:

import csv
from io import StringIO

data = "\"john\"|\"100032487\"|\"ab|cdef\"|\"ghijkl\""
print(next(csv.reader(StringIO(data), delimiter='|')))

将数据作为列表中的四个项返回:

['john', '100032487', 'ab|cdef', 'ghijkl']

由于第三项用引号引起来,因此通常意味着应该忽略其中的定界符。这种必需的逻辑就是为什么不建议为此使用正则表达式的原因。

csv.reader()带有一个文件对象,所以data是一个字符串,我首先使用StringIO()使data像文件一样。