我正在使用以下正则表达式表达式来拆分字符串中的分隔符,但忽略引号内的分隔符
re.split('''[|,](?=(?:[^'"]|'[^']*'|"[^"]*")*$)'', data)
但是我手动声明的分隔符应该是动态的,我将如何在上述regex表达式中使用一个变量,而不是在regex表达式本身中指定分隔符
data="\"john\"|\"100032487\"|\"ab|cdef\"|\"ghijkl\""
output = re.split('''[|,](?=(?:[^'"]|'[^']*'|"[^"]*")*$)'', data)
我应该将这些定界符分配给变量,而不是[|,]
,并在上面的正则表达式中使用该变量
答案 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
像文件一样。