我正在根据",#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)
答案 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)