如何用C#正则将<开头>结尾的匹配项包裹大括号且保留首尾
C#正则表达式实现指定替换需求
没问题,这需求用C#的正则替换就能轻松搞定!我给你拆解一下实现思路和可直接运行的代码示例:
核心思路
- 精准匹配所有以
<开头、以>结尾的片段(从你的示例来看,这里是字面量的HTML实体,而非真实的尖括号) - 保留匹配到的完整内容,再给它套上
{}大括号 - 替换文本中所有符合条件的实例
实现代码
using System; using System.Text.RegularExpressions; class Program { static void Main() { // 你的原始文本 string originalText = "This is <my> long <text>"; // 正则匹配模式:非贪婪匹配从<到>的完整片段 string regexPattern = @"<.*?>"; // 替换规则:用{}包裹整个匹配项($0代表完整匹配内容) string result = Regex.Replace(originalText, regexPattern, "{$0}"); Console.WriteLine(result); // 输出结果:This is {<my>} long {<text>} } }
关键细节解释
- 正则模式
@"<.*?>":<和>:匹配字面量的HTML实体字符(如果你的实际需求是匹配真实的<和>,把模式改成@"<.*?>"即可).*?:采用非贪婪匹配,确保只会匹配到离开头最近的>,避免出现多个匹配项被合并成一个的问题(比如如果有<a>b<c>,非贪婪会匹配两个独立片段,而贪婪匹配会把整个内容当成一个匹配项)
- 替换字符串
"{$0}":$0是正则替换中的特殊变量,代表整个匹配到的内容,我们直接用大括号把它包裹起来就完成了需求。
如果需要匹配包含换行符的片段,只需要在Regex.Replace里加上RegexOptions.Singleline参数即可:
string result = Regex.Replace(originalText, regexPattern, "{$0}", RegexOptions.Singleline);
内容的提问来源于stack exchange,提问作者vs77




