正则表达式:如何在XML属性值周围放置单引号?

时间:2008-12-14 01:46:13

标签: regex

我有一个看起来像

的字符串
"<input id=a/>"<input id=b/>"<input id=c/>etc.

我需要将其更改为

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

任何想法如何?

3 个答案:

答案 0 :(得分:4)

在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 :(得分:1)

这个怎么样:

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

这也有效:

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

答案 2 :(得分:0)

只用一个小样本就很难回答这个问题。对于给定的示例文本,您可以搜索正则表达式:

=(\w)

并将其替换为:

='$1'

或:

='\1'

取决于您使用的编程语言是否将$ 1或\ 1解释为替换文本中第一个捕获组的引用。

这种简单的搜索和替换可以完美地处理您给定的示例文本。

我担心它不适用于您的实际数据。如果是这种情况,那是因为您的示例文本不能代表您的实际数据。创建正则表达式最困难的部分是弄清楚要匹配的内容以及您不想匹配的内容。这是您必须在问题中指定的内容。