.net - 正则表达式替换为捕获组中的字符替换
问题描述
我可以使用正则表达式获取我感兴趣的字符串,但是如何用捕获中替换的字符替换它?
我想>
从任何 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>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("$&", ">", ""))
解决方案
您可以使用
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))
请注意,这[^\1]
不是您所期望的,它匹配除 SOH char ( \x01
) 之外的任何字符。调和的(?:(?!\1).)*?
贪婪令牌可以满足您的要求,它匹配任何字符,除了在第 1 组中捕获的值,0 次或更多次,尽可能少。
MatchEvaluator
用作替换参数,您可以在其中使用 访问整个匹配值m.Value
。
推荐阅读
- python - 是否可以制作一个会改变颜色的角色(彩虹角色)
- php - 异常消息 -> 数组到字符串的转换” Laravel
- python - 无法在模型的 save() 方法中更新/删除相关模型
- sql - 雪花参考表
- java - xxx 类型中的方法 xxx 不适用于 arguments()
- vba - VBA-使用映射表匹配具有多行的标题
- python - 检查任何 html 输入都不应在视觉上相互干扰 selenium python
- ansible - 通过 Ansible 运行的 aptitude 命令的非零返回码
- python - 如何将 svg 代码写入文件并将其保存在 Django 的媒体文件夹中?
- node.js - 将节点 js 分成后端的部分