繁体   English   中英

RegEx用于前缀/未加前缀的字符串

[英]RegEx for prefixed/unprefixed string

我正在尝试通过检测始终如下的标记来对我的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.Replace(before, "(<attr name=\"[first]?name\" />)", "$0<attr name=\"beep\" />");

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

我建议使用否定前瞻:

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\" />");

我想你想要的是:

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

[first]在正则表达式中写着“任何字符first ”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM