我有一个字符串,
line = '12/08/2013,3,"9,25",42:51,"3,08","12,9","13,9",159,170,"3,19",437,'
并且我想在引号之间找到逗号并将其替换为“:”。寻找结果
line = '12/08/2013,3,9:25,42:51,3:08,12:9,13:9,159,170,3:19,437,'
到目前为止,我已经能够匹配此模式,
import re
re.findall('(\"\d),(.+?\")', line)
但是,我想我应该使用
re.compile(...something..., line)
re.sub(':', line)
有人知道该怎么做吗?谢谢,labjunky
>>> import re
>>> line = '12/08/2013,3,"9,25",42:51,"3,08","12,9","13,9",159,170,"3,19",437,'
>>> re.sub(r'"(\d+),(\d+)"', r'\1:\2', line)
'12/08/2013,3,9:25,42:51,3:08,12:9,13:9,159,170,3:19,437,'
[\1
,\2
是指匹配的组。
非正则表达式解决方案:
>>> ''.join(x if i % 2 == 0 else x.replace(',', ':')
for i, x in enumerate(line.split('"')))
'12/08/2013,3,9:25,42:51,3:08,12:9,13:9,159,170,3:19,437,'
import re
line = '12/08/2013,3,"9,25",42:51,"3,08","12,9","13,9",159,170,"3,19",437,'
r = ""
for t in re.split(r'("[^"]*")', line):
if t[0] == '"':
t = t.replace(",", ":")[1:-1]
r += t
print r
打印:
12/08/2013,3,9:25,42:51,3:08,12:9,13:9,159,170,3:19,437,
还有一种通用的正则表达式解决方案,用于替换双引号(或单引号)之间的任何类型的固定(和非固定的)模式:用相应的模式匹配双引号或单引号的子字符串,并使用可调用的作为re.sub
的替代参数,您可以在其中操纵比赛:
用逗号替换双引号之间的逗号,并删除双引号(当前OP方案):
re.sub(r'"([^"]*)"', lambda x: x.group(1).replace(',', ':'), line)
(demo)# => 12/08/2013,3,9:25,42:51,3:08,12:9,13:9,159,170,3:19,437,
用逗号将双引号之间的逗号替换,并将keep用双引号引起来:
re.sub(r'"[^"]*"', lambda x: x.group(0).replace(',', ':'), line)
(demo)# => 12/08/2013,3,"9:25",42:51,"3:08","12:9","13:9",159,170,"3:19",437,
用逗号将双引号(keep]替换为逗号:re.sub(r''''[^']*'|"[^"]*"''', lambda x: x.group(0).replace(',', ':'), '''0,1,"2,3",'4,5',''')
(demo)# => 0,1,"2:3",'4:5',
[此外,如果需要处理转义的单引号和双引号,请考虑使用r"'[^\\']*(?:\\.[^\\']*)*'"
(对于单引号的子字符串),r'"[^\\"]*(?:\\.[^\\"]*)*"'
(对于双引号的子字符串)或同时使用-r''''[^\\']*(?:\\.[^\\']*)*'|"[^\\"]*(?:\\.[^\\"]*)*"'''
,而不是上面的模式。] >