我有一个文件名test.CSV
,我想用.xlsx
替换。我希望使用re
模块来使用不区分大小写的功能。我似乎无法弄清楚这一点:
test = re.compile('test.CSV', re.IGNORECASE)
test.sub('.xlsx', '.csv')
'.csv'
我错过了什么?好像这么简单的问题。
答案 0 :(得分:2)
修复正则表达式:
>>> pattern = re.compile(r'\.CSV', re.IGNORECASE)
>>> pattern.sub(repl='.xlsx', string='test.CSV')
'test.xlsx'
>>> pattern.sub(repl='.xlsx', string='test.csv')
'test.xlsx'
首先不使用正则表达式:
base, ext = os.path.splitext(fname)
if ext.lower() == '.csv':
fname = base + '.xlsx'
答案 1 :(得分:2)
如果您正在编译模式,re.compile
的第一个参数必须是要替换的模式。在您的情况下,它应该是\.csv
。但是,对于这种特殊情况,除非您多次使用相同的模式,否则我在预编译中看不到任何好处。
因此,使用顶级re.sub
函数就足够了:
>>> re.sub(r'\.csv', r'\.xlsx', 'test.CSV', flags=re.I)
'test\\.xlsx'
如果没有,请编译并使用如下模式:
>>> p = re.compile(r'\.csv', flags=re.I)
>>> p.sub(r'\.xslx', 'test.CSV')
'test\\.xslx'