Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 7, 2018 20:02:34

AndyWarhol
Зарегистрирован: 2018-08-07
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с написанием регулярного выражения

Здравствуйте. Хотел сделать так, чтобы мои символы в виде букв преобразовались в цифры. К примеру, a=1, b=2, и т.д. Есть какая-то возможность такое сделать именно через регулярные выражения? Только начинаю изучать их, посимвольное решение вижу, но вот через регулярные нет.

 import re
def calc(stroke):
    number_stroke = re.sub(r'\w', '???', stroke)
    return number_stroke
text = "a+(b+c)*a-b"
print(calc(text))

Офлайн

#2 Авг. 7, 2018 22:50:13

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Проблема с написанием регулярного выражения

ну шоб чисто через одну re, то тут ХЗ, а так вообще можно, если использовать ре, лямбду и словарь.

 import re
text = "a+(b+c)*a-b"
dct = {
"a" : "1",
"b" : "2",
"c" : "3",
}
print(re.sub('({})'.format("|".join(map(re.escape, dct.keys()))), lambda x: dct[x.string[x.start():x.end()]],  text))
>>> 
1+(2+3)*1-2
>>> 
кажеться весьма сложно и непонятно, для простоты понимания, можно упростить для конкретного примера.
 print(re.sub('(a|b|c)', lambda x: {'a': '1', 'c': '3', 'b': '2'}[x.group()] ,  text))
>>> 
1+(2+3)*1-2
>>> 

оригинал решения тут https://code.activestate.com/recipes/81330-single-pass-multiple-replace/
Оно конечно не идеально, там есть свои недостаки и нюансы, но в данном случае подходит.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Авг. 7, 2018 23:54:06)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version