正则表达式 替换为捕获组中的字符替换

RegEx Replace with character substitution in captured group

提问人:Pradeep Kumar 提问时间:5/9/2020 更新时间:5/9/2020 访问量:49

问:

我可以使用正则表达式获取我感兴趣的字符串,但是如何将其替换为捕获中替换的字符?

我想从任何html属性中删除该字符,或将其替换为.>>

示例原始字符串

<html> 
<head></head> 
<body> 
<div  sometag="abc>def" onclick="myfn()" class='xyz'>
Dear {@CustomerName},
blah blah blah
</div></body> 
</html>

期望的结果

<html> 
<head></head> 
<body> 
<div  sometag="abc&gt;def" onclick="myfn()" class='xyz'>
Dear {@CustomerName},
blah blah blah
</div></body> 
</html>

我正在使用以下正则表达式模式和替换

图案\s\w+\s*=\s*(['"])[^\1]+?\1

更换-- don't know! what should I use? --

这是我的代码(以防万一,如果它有帮助)vb.net

Dim reAttr As New Regex("\s\w+\s*=\s*(['""])[^\1]+?\1", RegexOptions.Singleline)
result = reAttr.Replace(text, Replace("$&", ">", ""))
.net vb.net 正则表达式替换

评论


答:

1赞 Wiktor Stribiżew 5/9/2020 #1

你可以使用

Dim reAttr As New Regex("\s\w+\s*=\s*(['""])(?:(?!\1).)*?\1", RegexOptions.Singleline)
Dim result = reAttr.Replace(text, New MatchEvaluator(Function(m As Match)
         Return m.Value.Replace(">", "-")
     End Function))

请注意,它没有按照您的预期执行操作,它匹配除 SOH char () 之外的任何字符。脾气暴躁的贪婪令牌会执行您想要的操作,它会匹配任何字符,但组 1 中捕获的值除外,0 次或更多次,尽可能少。[^\1]\x01(?:(?!\1).)*?

用作替换参数,您可以在其中使用 访问整个匹配值。MatchEvaluatorm.Value

评论

1赞 Pradeep Kumar 5/9/2020
完美工作!非常感谢。我浪费了一整天的时间。另外,正在选择我期望的字符串部分,所以对它感到困惑。也感谢您纠正这一点。[\1]