Найти - Пользователи
Полная версия: Регулярные выражения.
Начало » Python для новичков » Регулярные выражения.
1
Duck-Pagan
Решил поиграться-разбираться с этими демоническими выражениями.

Балуюсь с фильтрами и изменениями строк.

Когда у нас строка вида: ‘lalala 4’
Представить ее в виде: ‘lalala 10’ - не проблема

re.sub('\d+', '10', 'lalala 4')

Но проблема с изменением строки возникает тут: ‘lalla 2 blala 14 lfddf’
- когда я хочу получить, например, такую строку: 'lalla subnum(0) blala subnum(1) lfddf'

Висну на моменте, как поставить измененные числа в соответствии с их местами:
import re
import random
zindex = 'lalla 2 blala 14 lfddf'
numb = re.compile('\d+')
subnum = [str(int(i)+random.randint(-5,5)) for i in numb.findall(zindex)]
При попытки использовать re.sub() - изменяются оба числа, как должен выглядить фильтр для pattern - не могу сообразить, если это вообще верный подход.
reclosedev
Duck-Pagan
Но проблема с изменением строки возникает тут: ‘lalla 2 blala 14 lfddf’
- когда я хочу получить, например, такую строку: ‘lalla subnum(0) blala subnum(1) lfddf’
Не совсем понятно, что такое subnum(0).

re.sub может функцию принимать вместо строки-замены, а там уж можно любых дел натворить:
import re
import itertools
 
zindex = 'lalla 2 blala 14 lfddf'
 
def position_tagger(start=0):
    counter = itertools.count(start)
    def wrapped(match):
        return str(counter.next())
    return wrapped
 
print re.sub('\d+', position_tagger(), zindex) # lalla 0 blala 1 lfddf
Duck-Pagan
subnum - это list, содержащий цифры, полученные из строки. В коде ниже(выше). Просто квадратные скобки не отображаются - поэтому использовал круглые.
Модуль itertools - почитаю.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB