re.sub - 文件路径

时间:2018-03-08 17:15:37

标签: python regex

我有一个文件名test.CSV,我想用.xlsx替换。我希望使用re模块来使用不区分大小写的功能。我似乎无法弄清楚这一点:

test = re.compile('test.CSV', re.IGNORECASE)
test.sub('.xlsx', '.csv')
'.csv'

我错过了什么?好像这么简单的问题。

2 个答案:

答案 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'