分裂使用正则表达式为字符串,但忽略了引号内的隔板和隔板应是动态

问题描述 投票:-1回答:1

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

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

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

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

代替[|,]我应该分配这些分隔符到一个变量,并在上述正则表达式表达式中使用的变量

python regex
1个回答
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像一个文件。

© www.soinside.com 2019 - 2024. All rights reserved.