Форум сайта python.su
0
Доброго времени суток!
Есть файл в котором находится некий контент (содержимое html страницы) мне необходимо заменить все 5 значные цифры на их же +300 (т.е 28501 => 28801). Числа находятся в тегах <tr>…</tr>. Я пробовал замену с помощью регулярных выражений, но не получилось. По этому решил выдрать все эти числа из файла, увеличить их, а затем создав из исходного документа список заменить его на новый - отредактированный. вот написал код:
#!/usr/bin/env python #-*- coding: utf-8 -*- import re data= open('text 2.txt').read() f = open("text1.txt","w") k="<td>\d\d\d\d\d</td>" found=re.findall(k, data) found=str(found) found=found.translate(None, "td<'>/][,") f.write(found) f.close() print found print 'end'
Офлайн
txt = """ abc<tr>12345</tr>mag dmg<tr>67890</tr>amj """ import re pattern = re.compile(r'(<tr>\d{5}</tr>)') lst = pattern.split(txt) def edit(t): if pattern.match(t): return '<tr>%d</tr>' % (eval(t[4:-5])+300) else: return t txt = ''.join([edit(t) for t in lst]) print txt
Офлайн
0
dimy44 Спасибо!)!)! Печенек, бесплатного вайфая и добра тебе!)
Офлайн
14
dimy44Чем int не устраивает?
eval
Офлайн
Да, int конечно. Сначала написал, а потом подумал). Редактировать уже не стал.
Офлайн
173
re.sub в качестве replacement может принимать функцию, которая получает матч и возвращает замену:
import re def add_300(m): return str(int(m.group(1)) + 300) text = "<td>10000</td><tr>20000</td><td>12345</td>" result = re.sub('<td>(\d{5})</td>', add_300, text)
Отредактировано reclosedev (Окт. 7, 2012 17:20:13)
Офлайн
14
Ы 
Офлайн
857
reclosedev не проверил код перед отправкой
>>> import re >>> >>> text = "<td>10000</td><tr>20000</td><td>12345</td>" >>> >>> re.sub(r'(<td>)(\d{5})(</td>)', ... lambda mo: '{}{}{}'.format( ... mo.group(1), ... int(mo.group(2)) + 300, ... mo.group(3) ... ), ... text) '<td>10300</td><tr>20000</td><td>12645</td>' >>>
Офлайн