如何不区分大小写地替换非静态子字符串

时间:2010-07-29 23:59:24

标签: python string case-insensitive

这个问题与this类似,只是要替换的子字符串只在运行时知道。

我想编写ireplace的定义,其行为如下:

>>> ireplace(r'c:\Python26\lib\site.py', r'C:\python26', r'image\python26')
r'image\python26\lib\site.py'
>>>

2 个答案:

答案 0 :(得分:1)

在这种情况下,我认为这是最简单的方式

r'c:\Python26\lib\site.py'.lower().replace('python26', r'image\python26')

对于不区分大小写的情况,regexp是最简单的方法

>>> def ireplace(s, a, b):
...     return re.sub("(?i)"+re.escape(a),b,s)
...
>>> print ireplace(r'c:\Python26\lib\site.py', 'C:\python26', r'image\python26')
image\python26\lib\site.py

答案 1 :(得分:0)

def ireplace(s, a, b):
    """Replace `a` with `b` in s without caring about case"""
    re_a = re.compile(re.escape(a), re.IGNORECASE)
    return re_a.sub(lambda m: b, s)

注意:lambda m: b hack是必要的,因为如果它有连字符,re.escape(b)似乎会破坏字符串。