正则表达式python忽略引号之间的模式

2024-06-30 07:55:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用夹板固定一个基于“,”的文本。我需要忽略引号之间的逗号(简单或双引号)。你知道吗

文本示例:

Capacitors,3,"C2,C7-C8",100nF,,
Capacitors,3,'C2,C7-C8',100nF,,

我得回去了

['Capacitors','3','C2,C7-C8','100nF','','']

如何在正则表达式中表示这一点(忽略引号之间的内容)?(指Python)

目前,我正在使用

pattern = re.compile('\s*,\s*')
pattern.split(myText)

Tags: 文本re示例内容引号patternsplit逗号
3条回答

不要使用正则表达式。只要稍加调整,就可以使用csv模块完美地解析该行(csv设计用于处理带引号的逗号)。只需将引号规范化为双引号:

import csv

s = """Capacitors,3,"C2,C7-C8",100nF,, Capacitors,3,'C2,C7-C8',100nF,,"""

print(next(csv.reader([s.replace("'",'"')])))

结果:

['Capacitors', '3', 'C2,C7-C8', '100nF', '', ' Capacitors', '3', 'C2,C7-C8', '100nF', '', '']

因为问题是在regex下标记的,所以这里是regex版本:

s="""Capacitors,3,"C2,C7-C8",100nF,,
Capacitors,3,'C2,C7-C8',100nF,,"""
import re
pattern=r"(([\"'])(?:(?!\2).)*|[^,\n]+)"
word_list=[]
match=re.finditer(pattern,s)
for find in match:
    word_list.append(find.group())

print(word_list)

我猜你改了你的问题。看起来像csv格式的文件:

import io

s = """\
Capacitors,3,"C2,C7-C8",100nF,,
Capacitors,3,'C2,C7-C8',100nF,,"""

[i for i in csv.reader(io.StringIO(s), delimiter=',', quotechar='"')]

退货:

[['Capacitors', '3', 'C2,C7-C8', '100nF', '', ''],
 ['Capacitors', '3', "'C2", "C7-C8'", '100nF', '', '']]

相关问题 更多 >