Regex находит и заменяет все пробелы подчеркиванием между тегами

Я пытаюсь отформатировать XML-документ, прежде чем импортировать его в базу данных. У меня есть несколько сотен строк с <Image #1 File Name>Random string to find and replace</Image #1 File Name>. Я понятия не имею, как правильно найти и заменить шаблон в регулярном выражении, чтобы делать то, что мне нужно. Я смог сопоставить все экземпляры с этим:

<Image #1 File Name>(.*?)</Image #1 File Name>

Но я не уверен в шаблоне, который мне нужен, чтобы затем заменить пробел символами подчеркивания между тегами открытия/закрытия <Image #1 File Name>Random_string_to_find_and_replace</Image #1 File Name>


person Siebird    schedule 15.08.2012    source источник
comment
А как насчет пробелов в тегах? У вас не может быть пробелов в тегах xml, подобных этому. Это просто недопустимый xml.   -  person FailedDev    schedule 16.08.2012
comment
Я не беспокоюсь о проверке, поскольку она используется только для импорта в базу данных.   -  person Siebird    schedule 16.08.2012
comment
Механизм регулярных выражений Sublime Text не позволяет вам искать/заменять подобные вещи, IIRC, поскольку вы не можете изменять группы захвата.   -  person Blender    schedule 16.08.2012


Ответы (2)


awk -F'<|>' '{gsub(/ /,"_",$3);print"<"$2">"$3"<"$4">"}' yourxmlfile

Хорошо, вы можете проверить с помощью оператора соответствия ~ перед фильтрацией:

awk -F'<|>' '{if ($0 ~ /Image #1 File Name/) {gsub(/ /,"_",$3);print"<"$2">"$3"<"$4">"} else {print;}}' yourxmlfile
person Stephane Rouberol    schedule 15.08.2012
comment
Как добраться... Мне нужны только определенные узлы (‹Image #1 File Name›) в файле xml, которые нужно заменить. Это относится к каждому узлу, а также добавляет ‹› после каждого тега открытой и закрытой строки, т.е. ‹строка›‹› и ‹/строка›‹› - person Siebird; 16.08.2012

Предлагаю следующую хитрость:

  1. Замените <Image #1 File Name> и </Image #1 File Name> двумя разными специальными словами без пробелов (пример MY_START_TAG и MY_END_TAG).
  2. Замените все пробелы символами подчеркивания.
  3. Вернуть первый шаг.

Разделяй и властвуй :)

person aanton    schedule 17.08.2012
comment
Что я собираюсь сделать, так это импортировать XML-документ в базу данных MySQL, а затем заменить строку в этих столбцах. Должен быть самый простой безболезненный способ. Спасибо за вклад, хотя - person Siebird; 17.08.2012