2016-07-05 2 views
0

Я создал функцию для замены строки со словарем,Преобразовать питон регулярное выражение обратной ссылки понизить

def tolower(text): 
    patterns = { 
     "\[(.*?)\]": (r"[\1-123]").lower() 
    } 
    for key in patterns: 
     text = re.sub(key, patterns[key], text) 
    return text 
print tolower("[IMG]UPPER[/IMG]") 

Но я хочу питона \ 1 обратной ссылки преобразовать строку в нижний после замены.

Итак, я жду результата, как это:

[img-123]UPPER[/img-123] 

Может кто-то пожалуйста, скажите мне, как он работает с заменой регулярных выражений обратной ссылки?

ответ

1

Изменение к использованию вызываемым в качестве замены аргумента:

import re 

def tolower(text): 
    patterns = { 
     "\[(.*?)\]": lambda m: '[{}-123]'.format(m.group(1).lower()) 
    } 
    for key in patterns: 
     text = re.sub(key, patterns[key], text) 
    return text 
print(tolower("[IMG]UPPER[/IMG]")) 
# [img-123]UPPER[/img-123] 
1

Вы можете передать функцию re.sub(), что позволит вам сделать это, вот пример:

def replaceLower(match): 
    return '[' + match.group(1).lower() + '-123]' 

Чтобы использовать вместо того, чтобы каждая ключевая карта была в регулярном выражении, сопоставьте ключ с функцией, которая вызывается re.sub:

def tolower(text): 
    patterns = { 
     "\[(.*?)\]": replaceLower 
    } 
    for key in patterns: 
     text = re.sub(key, patterns[key], text) 
    return text 
Смежные вопросы