Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 29, 2014 09:29:06

bangzilla
Зарегистрирован: 2014-06-29
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск и замена текста с помощью регулярных выражений

Ребят, помогите разобраться, я чет запутался в решении проблемы. Изучаю язык недавно.
Задача такова.
У меня есть XML файл, в нем есть много атрибутов. Меня интересует атрибуты field_60=“тут любое число №1/”.
Нужно найти во всем документе эти атрибуты(их много встречается в тексте) и к записи приведенной выше нужно добавить конкретное число. Например, у меня есть запись field_60=“12/” мне ее нужно поменять на field_60=“12/77” , и так во всем документе. Я начал решать задачу с помощью регулярных выражений и модуля re. Но успеха не достиг. Подскажите, кто знает, как можно решить мою задачу. Мой код ниже.


import re
d1=open("d1_2.xml")#открываю xml документ на чтение
d1str=d1.read()#читаю документ в строку
replData=re.sub('(field_60="[0-9]/)"','999', d1str)#применил метод sub для замены, но к сожалению у меня заменилась вся запись field_60 на 999(так как второй параметр может быть либо строкой либо функцией)
outputFile=open("outputD1.xml","w")#открываю новый файл для записи
outputFile.write(replData)
outputFile.close

Офлайн

#2 Июнь 29, 2014 10:31:54

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск и замена текста с помощью регулярных выражений

>>> import re
>>> 
>>> pat = r'(\sfield_60=.)(12)(/)(.\s)'
>>> rep = r'\1\2\g<3>77\4'
>>> 
>>> s = 'abc field_60="12/" def'
>>> 
>>> out = re.sub(pat, rep, s)
>>> print(out)
abc field_60="12/77" def
>>>

bangzilla
У меня есть XML файл

Такие файлы лучше обрабатывать с помощью модуля xml. Обработка с помощью регулярных выражений может приводить к ошибкам. Совпадение со строками в комментариях, например.



Офлайн

#3 Июнь 29, 2014 10:49:31

bangzilla
Зарегистрирован: 2014-06-29
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск и замена текста с помощью регулярных выражений

Спасибо, почитаю за модули для XML.
Пока этот код не совсем понял.
В переменной pat вы создали регулярное выражение и разбили его на группы?
В переменной rep не понял запись g<3>.
Не могли бы пояснить?

Отредактировано bangzilla (Июнь 29, 2014 10:49:50)

Офлайн

#4 Июнь 29, 2014 12:05:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск и замена текста с помощью регулярных выражений

bangzilla
Не могли бы пояснить?

https://docs.python.org/3/library/re.html#re.sub

Так как там к обратной ссылке \3 примыкает число 77, будет рассматриваться последовательность \377. Чтобы расмматривалась именно ссылка \3, делается её отделение с помощью конструкции \g<группа>.



Офлайн

#5 Июнь 29, 2014 15:13:59

bangzilla
Зарегистрирован: 2014-06-29
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск и замена текста с помощью регулярных выражений

Спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version