栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在python中拆分但忽略带引号的字符串中的分隔符?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在python中拆分但忽略带引号的字符串中的分隔符?

大多数答案似乎过于复杂。你 并不 需要反向引用。你 并不
需要依赖于是否re.findall给出重叠的匹配。鉴于输入无法使用csv模块进行解析,因此正则表达式是唯一可行的方法,您所要做的就是使用与字段匹配的模式调用re.split。

请注意,这里匹配字段比匹配分隔符要容易得多:

import redata = """part 1;"this is ; part 2;";'this is ; part 3';part 4;this "is ; part" 5"""PATTERN = re.compile(r'''((?:[^;"']|"[^"]*"|'[^']*')+)''')print PATTERN.split(data)[1::2]

输出为:

['part 1', '"this is ; part 2;"', "'this is ; part 3'", 'part 4', 'this "is ; part" 5']

正如Jean-Luc Nacif
Coelho正确指出的那样,这将无法正确处理空组。根据情况可能会或可能不会重要。如果确实如此,则可以通过以下方式处理该问题,例如,将必须知道在拆分之前未出现在数据中的某些字符串(不带分号)替换

';;'
';<marker>;'
where
<marker>
。另外,您还需要在以下时间恢复数据:

>>> marker = ";!$%^&;">>> [r.replace(marker[1:-1],'') for r in PATTERN.split("aaa;;aaa;'b;;b'".replace(';;', marker))[1::2]]['aaa', '', 'aaa', "'b;;b'"]

但是,这太过分了。还有更好的建议吗?



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/669250.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号