0

我试图通过检测一个总是这样的标签来对我的 XML 字符串执行转换:

<attr name="firstName" />
<attr name="Name" />
<attr name="lastName" />

我希望抓住它并用后缀自行替换它,所以我会得到这个:

<attr name="firstName" /><attr name="beep" />
<attr name="Name" /><attr name="beep" />

但如果是最后一个,我希望什么都不做。

<attr name="lastName" />

我正在尝试这种检测模式。

Regex.Replace(before, "(<attr name=\"[first]*name\" />)", "[0]<attr name=\"beep\" />");

但这将匹配first的所有排列。我怎样才能表达最多一个确切的字符串 "first"

4

3 回答 3

1

我建议使用负前瞻:

Regex.Replace(before, "(<attr name=\"(?!last)[^\"]*Name\" />)", "$0<attr name=\"beep\" />");

要检测字符串“first”的零个或一个,您可以简单地将lookbehind更改为可选的正常组,并将“last”替换为“first”。

Regex.Replace(before, "(<attr name=\"(?:first)?Name\" />)", "$0<attr name=\"beep\" />");
于 2013-03-19T11:17:39.217 回答
1
Regex.Replace(before, "(<attr name=\"[first]?name\" />)", "$0<attr name=\"beep\" />");

*用 a替换?将搜索一次或零次出现。

于 2013-03-19T11:02:02.430 回答
0

我想你想要的是:

Regex.Replace(before, "(<attr name=\"(?:first)?name\" />)", "$0<attr name=\"beep\" />");

[first]在正则表达式中表示“任何字符f, i, r, sor t”。

(?:first)表示“字符串first,视为(非捕获)组”。?然后说前面的匹配应该发生零次或一次。

于 2013-03-19T11:49:27.763 回答