Найти - Пользователи
Полная версия: Поиск и замена текста с помощью регулярных выражений
Начало » Python для новичков » Поиск и замена текста с помощью регулярных выражений
1
bangzilla
Ребят, помогите разобраться, я чет запутался в решении проблемы. Изучаю язык недавно.
Задача такова.
У меня есть 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
py.user.next
>>> 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. Обработка с помощью регулярных выражений может приводить к ошибкам. Совпадение со строками в комментариях, например.
bangzilla
Спасибо, почитаю за модули для XML.
Пока этот код не совсем понял.
В переменной pat вы создали регулярное выражение и разбили его на группы?
В переменной rep не понял запись g<3>.
Не могли бы пояснить?
py.user.next
bangzilla
Не могли бы пояснить?

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

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