Передача функции re.sub в Python
У меня есть строки, которые содержат число где-то в них, и я пытаюсь заменить это число на их текстовую нотацию (т.е. 3 → три). У меня есть функция, которая делает это. Теперь проблема заключается в нахождении номера внутри строки, сохраняя остальную часть строки неповрежденной. Для этого я решил использовать функцию re.sub
, которая может принять "вызываемый". Однако переданный ему объект является внутренним _sre.SRE_Match
, и я не уверен, как его обрабатывать. Моя функция принимает число или строковое представление.
Как мне написать какую-нибудь вспомогательную функцию, которая может использоваться для соединения вызова re.sub
с моей функцией, выполняющей необходимую обработку? Альтернативно, есть ли лучший способ сделать то, что я хочу?
Ответы
Ответ 1
Вы можете вызвать group()
, чтобы получить соответствующую строку:
import re
number_mapping = {'1': 'one',
'2': 'two',
'3': 'three'}
s = "1 testing 2 3"
print re.sub(r'\d', lambda x: number_mapping[x.group()], s)
печатает:
one testing two three
Ответ 2
Чтобы ваша функция соответствовала re.sub
, вы можете обернуть ее с помощью лямбда:
re.sub('pattern', lambda m: myfunction(m.group()), 'text')