带前缀/不带前缀的字符串的RegEx

本文关键字:前缀 RegEx 字符串 | 更新日期: 2023-09-27 18:04:34

我正试图通过检测一个总是这样的标签来对我的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">

带前缀/不带前缀的字符串的RegEx

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

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

我建议使用负面前瞻:

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

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

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

我想你想要的是:

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

正则表达式中的[first]表示"任何字符first"。

(?:first)表示"字符串first,被视为(非捕获(组"。CCD_ 11然后说前一个匹配应该发生零次或一次。