Python 如何不敏感地替换非静态子字符串

Python 如何不敏感地替换非静态子字符串,python,string,case-insensitive,Python,String,Case Insensitive,这个问题与类似,只是要替换的子字符串仅在运行时已知 我想编写ireplace的定义,其行为如下: >>> ireplace(r'c:\Python26\lib\site.py', r'C:\python26', r'image\python26') r'image\python26\lib\site.py' >>> 注意:lambda m:bhack是必要的,因为re.escape(b)如果字符串有连字符,它似乎会损坏字符串 注意:lambda m:bhac

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

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

>>> ireplace(r'c:\Python26\lib\site.py', r'C:\python26', r'image\python26')
r'image\python26\lib\site.py'
>>>
注意:
lambda m:b
hack是必要的,因为
re.escape(b)
如果字符串有连字符,它似乎会损坏字符串


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

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

r'c:\Python26\lib\site.py'.lower().replace('python26', r'image\python26')
>>> 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
对于不区分大小写的,regexp是最简单的方法

r'c:\Python26\lib\site.py'.lower().replace('python26', r'image\python26')
>>> 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

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

r'c:\Python26\lib\site.py'.lower().replace('python26', r'image\python26')
>>> 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
对于不区分大小写的,regexp是最简单的方法

r'c:\Python26\lib\site.py'.lower().replace('python26', r'image\python26')
>>> 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

有些人在遇到问题时会认为“我知道,我将使用正则表达式”。现在他们有两个问题。有些人在遇到问题时会认为“我知道,我将使用正则表达式”。现在他们有两个问题。您确定不希望返回的字符串以c:\”开头吗?如果是这样的话,那不仅仅是一个替换。@乔恩·埃里克:那是我的错误,我修复了这个示例。你确定不希望返回的字符串以c:\开头吗?如果是这样的话,那就不仅仅是替换了。@Jon Eric:那是我的错误,我修复了这个例子。嗯,隐含的假设是我想保留输入字符串的大小写。您的解决方案不会保留大小写。@Sridhar,我使用regex添加了一个不区分大小写的版本。您不应该转义
b
,因为您没有将其用作正则表达式,只需
a
将其标记为答案,因为它比我的解决方案简单。嗯,隐含的假设是我希望保留输入字符串的大小写。您的解决方案不会保留大小写。@Sridhar,我使用regex添加了一个不区分大小写的版本。您不应该转义
b
,因为您没有将其用作正则表达式,只需将其标记为答案,因为它比我的解决方案简单。