【发布时间】:2011-10-04 16:41:34
【问题描述】:
我需要对引号块内的所有逗号进行正则表达式搜索和替换。
即
"thing1,blah","thing2,blah","thing3,blah",thing4
需要成为
"thing1\,blah","thing2\,blah","thing3\,blah",thing4
我的代码:
inFile = open(inFileName,'r')
inFileRl = inFile.readlines()
inFile.close()
p = re.compile(r'["]([^"]*)["]')
for line in inFileRl:
pg = p.search(line)
# found comment block
if pg:
q = re.compile(r'[^\\],')
# found comma within comment block
qg = q.search(pg.group(0))
if qg:
# Here I want to reconstitute the line and print it with the replaced text
#print re.sub(r'([^\\])\,',r'\1\,',pg.group(0))
我只需要根据 RegEx 过滤我想要的列,进一步过滤,
然后进行正则表达式替换,然后重新构造该行。
如何在 Python 中做到这一点?
【问题讨论】:
-
不是一个真正的答案,但在您重新实现之前,也许 CSV 解析器可以更好地为您服务?这似乎是您正在处理的格式。
-
我实际上希望为我的自定义 CSV 解析器准备好数据 csv.register_dialect( 'escapedExcel' , delimiter = ',' , skipinitialspace = 0 , doublequote = 1 , quoting = csv.QUOTE_ALL , quotechar = '"' , lineterminator = '\r\n' , escapechar = '\\' )
-
我明白了,那么我相信您想使用匹配对象的
span和start方法来获取它周围的东西并重新组合您的行。但我不确定为什么在“选择”循环之后对 sub 的单次调用是不行的。 -
@Dragos Toader:为什么要替换引号内的逗号?
csv.reader引号内的逗号没有问题。 -
添加反斜杠只是意味着您的解析器需要处理的另一种机制。现在你也需要反斜杠所有的反斜杠。正确的解决方法是教你的 CSV 解析器忽略双引号内的逗号,或者使用现有的 CSV 解析器。