Регулярное выражение: как поместить одинарные кавычки вокруг значений атрибутов XML? - PullRequest
5 голосов
/ 14 декабря 2008

у меня есть строка, которая выглядит как

"<input id=a/>"<input id=b/>"<input id=c/>etc.

Мне нужно изменить его на

"<input id='a'/>"<input id='b'/>"<input id='c'/>etc,

есть идеи, как?

Ответы [ 3 ]

4 голосов
/ 14 декабря 2008

В C # вы можете написать это как:

resultString = Regex.Replace(subjectString, @"(<.*?id\s*=\s*)(\w+)(.*?>)", "$1'$2'$3", RegexOptions.Multiline);

В VB.Net это будет просто:

ResultString = Regex.Replace(SubjectString, "(<.*?id\s*=\s*)(\w+)(.*?>)", "$1'$2'$3", RegexOptions.Multiline)

В каноническом Perl вы могли бы написать это как:

$subject =~ s/(<.*?id\s*=\s*)(\w+)(.*?>)/$1'$2'$3/mg;

В PHP:

$result = preg_replace('/(<.*?id\s*=\s*)(\w+)(.*?>)/m', '$1\'$2\'$3', $subject);

В Java:

resultString = subjectString.replaceAll("(?m)(<.*?id\\s*=\\s*)(\\w+)(.*?>)", "$1'$2'$3");

В Javascript:

result = subject.replace(/(<.*?id\s*=\s*)(\w+)(.*?>)/mg, "$1'$2'$3");
1 голос
/ 14 декабря 2008

Как насчет этого:

%s/"<input id=\(.\)\/>/"<input id='\1'\/>/g

Это также будет работать:

%s/\("<input id=\)\(.\)\/>/\1'\2'\/>/g
0 голосов
/ 14 декабря 2008

Трудно действительно ответить на этот вопрос только с одной небольшой выборкой. Для данного образца текста, вы можете найти регулярное выражение:

=(\w)

и замените его на:

='$1'

или

='\1'

В зависимости от того, интерпретирует ли язык программирования, с которым вы работаете, $ 1 или \ 1 как ссылку на первую группу захвата в тексте замены.

Этот тривиальный поиск и замена отлично работает с вашим примером текста.

Боюсь, это не сработает с вашими фактическими данными. Если это так, то это потому, что ваш образец текста не соответствует вашим фактическим данным. Самое сложное в создании регулярных выражений - это выяснить, что вы хотите сопоставить, а что нет. Это то, что вы должны указать в своем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...