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

时间:2017-11-18 15:25:45

标签: python regex

我正在根据",#34;安装一个文本。我需要在引号之间忽略文本中的逗号(简单或加倍)。

文字示例:

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

必须返回

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

如何在正则表达式中这样说(在引号之间忽略)? (of python)

目前,我正在使用

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

3 个答案:

答案 0 :(得分:1)

不要使用正则表达式。通过稍微调整,您可以使用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', '', '']

答案 1 :(得分:0)

我猜你改变了你的问题。这看起来像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', '', '']]

答案 2 :(得分:0)

由于问题是在正则表达式下标记的,所以这里是正则表达式版本:

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)