LINUX.ORG.RU

re.sub и многократная замена

 


0

1

Почему re.sub не хочет делать многократную замену в тексте? Например, из «1,2,3,4» надо сделать «1, 2, 3, 4»

line='1,2,3,4'
match=re.search('(\d+,)(\d+)',line)
if match:
        replace_what=match.group(0)
        replace_with=match.group(1)+' '+match.group(2)
        line=re.sub(replace_what,replace_with,line)
print(line)

1, 2,3,4

Прошу помочь без привязки к конкретно этому коду, потому что образцы для замены могут быть разными.

Deleted

А где у тебя тут многократная замена? Ты находишь первое совпадени и его заменяешь.

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

Спасибо, К.О. Ну так как сделать многократную замену?

P.S. Есть такое, но мне желательно попроще, без классов и словарей.

Deleted
()
Ответ на: комментарий от vurdalak
for match in re.finditer(replace_what,replace_with):

или

for match in re.findall(replace_what,replace_with):
match - это boolean, цикл for не работает.

Deleted
()
Ответ на: комментарий от Deleted

Не replace_what и replace_with, а (регулярное_выражение, строка_в_которой_ищешь).

vurdalak ★★★★★
()

У тебя проблема в том, что результаты поиска регулярки перекрываются.

Вот так вот меняет все:

In [14]: print re.sub('(\d+,)', r'\1 ', '1,2,3,4,5')
1, 2, 3, 4, 5
provaton ★★★★★
()

Тебе нужен look(ahead|behind), см. в доку по regex syntax.

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.