c#如何使用正则表达式_c#正则表达式的几种常见方法
Regex.Match 用于判断匹配或获取首个结果轻量安全Regex.Matches 返回 MatchCollection 以遍历全部匹配但需用 foreach 或转列表访问避免索引取值导致性能浪费。匹配字符串时 Regex.Match 和 Regex.Matches 到底选哪个看你要不要全部结果。只判断是否匹配、或只要第一个匹配项用 Regex.Match要遍历所有匹配比如提取多个邮箱、多个数字必须用 Regex.Matches它返回 MatchCollection不是数组不能直接用索引访问——得用 foreach 或转成列表。常见错误是写成var m Regex.Matches(input, pattern)[0]看似取第一个但内部仍执行了全量扫描浪费性能如果只想要第一个Regex.Match 更轻量、也更安全不会因空集合抛 IndexOutOfRangeException。注意点Regex.Match 返回 Match.Success 为 false 表示没匹配到别直接取 .ValueRegex.Matches 在 .NET 5 默认是惰性求值循环中修改原字符串不会影响已缓存的匹配结果但别在遍历时调 .Count——会强制枚举全部如果正则里用了 ^ 或 $记得确认是否启用了 RegexOptions.Multiline否则它们只匹配整个字符串首尾不匹配每行Regex.Replace 的回调函数怎么写才不出错当替换逻辑依赖捕获组内容、或需要运行时计算比如把日期格式从 yyyy-MM-dd 转成 dd/MM/yyyy就得用带 MatchEvaluator 的重载而不是简单字符串替换。最常踩的坑是在回调里直接拼接 match.Groups[1].Value却没检查 Groups[1].Success ——分组可能根本没参与匹配尤其用了 ? 或 | 的时候这时 .Value 是空字符串不是 null但语义已经错了。实操建议回调函数签名必须是 string MatchEvaluator(Match)别漏 return用 match.Groups[name].Success 判断具名分组是否存在比靠索引更稳避免在回调里做耗时操作如 IO、数据库查询Replace 是同步阻塞的会影响整体响应如果只是简单替换优先用 Regex.Replace(input, pattern, replacement)其中 replacement 可含 $1、${name} 等引用语法比写回调更高效编译正则表达式什么时候该用 RegexOptions.Compiled它会让正则在首次使用时编译成 IL后续执行更快但代价是启动慢、内存占用高尤其模式多的时候。不是所有场景都适合。 Tellers AI Tellers是一款自动视频编辑工具可以将文本、文章或故事转换为视频。