带前缀/不带前缀的字符串的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.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]
表示"任何字符f
、i
、r
、s
或t
"。
(?:first)
表示"字符串first
,被视为(非捕获(组"。CCD_ 11然后说前一个匹配应该发生零次或一次。