python re.sub с целочисленной операцией

1

В настоящее время у меня есть подстановка шаблона, которая делает следующее:

x = re.sub('(\d+)','\g<1>','100')
=> x = 100

Мне нужно разделить целое число на 10 в подстановке, так как шаблон и подстановка - это входы из текстовых полей базы данных (поэтому я не могу использовать код). Есть ли способ сделать это так, чтобы = > x = 10

Спасибо, Ричард

Теги:

3 ответа

4
Лучший ответ
import re

t = 'a b c 100 200'

f = lambda x: str(int(x.group(0)) / 10)
re.sub('\d+', f, t)

# returns 'a b c 10 20'
  • 0
    Наконец, правильный ответ прибыл :)
1

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

>>> def repl(mo):
...    return mo.group(0)[:-1]
... 
>>> import re
>>> re.sub('\d+', repl, '100')
'10'
1

re.sub может принимать функцию как второй параметр.

import re

def func(r):
    return str(int(r.group(0)) / 10) 

x = re.sub("\d+", func, "100")
print x

Ещё вопросы

Сообщество Overcoder
Наверх
Меню