Как заменить нестатическую подстроку без учета регистра - PullRequest
1 голос
/ 30 июля 2010

Этот вопрос похож на на , за исключением того, что заменяемая подстрока известна только во время выполнения.

Я хочу написать определение ireplace, которое ведет себя так:

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

Ответы [ 2 ]

1 голос
/ 30 июля 2010

В данном случае я думаю, что это самый простой способ

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
0 голосов
/ 30 июля 2010
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 необходимо, так как re.escape(b), похоже, искажает строку, если в ней есть дефисы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...