1. 引言
正则表达式是处理字符串的强大工具,在 c# 中通过 system.text.regularexpressions 命名空间提供支持。无论是数据校验、文本提取还是字符串替换,正则表达式都能大幅提升开发效率。本文将从基础语法讲起,逐步深入到 c# 中的实际应用场景。
2. 正则表达式基础
正则表达式由普通字符和元字符组成。普通字符匹配自身,元字符则具有特殊含义。下面列出最常用的元字符:
| 元字符 | 含义 | 示例 |
|---|---|---|
. | 匹配任意单个字符(除换行符) | a.c 匹配 abc |
* | 匹配前一个字符 0 次或多次 | ab*c 匹配 ac、abc |
+ | 匹配前一个字符 1 次或多次 | ab+c 匹配 abc、abbc |
? | 匹配前一个字符 0 次或 1 次 | ab?c 匹配 ac、abc |
^ | 匹配字符串开头 | ^abc 匹配以 abc 开头的字符串 |
$ | 匹配字符串结尾 | abc$ 匹配以 abc 结尾的字符串 |
\d | 匹配数字字符 | \d{4} 匹配 4 位数字 |
\w | 匹配字母、数字或下划线 | \w+ 匹配单词 |
\s | 匹配空白字符 | \s+ 匹配连续空白 |
3. c# 中的正则表达式类
c# 中主要使用 regex 类来操作正则表达式。常用的方法包括 ismatch、match、matches 和 replace。下面通过示例逐一说明。
3.1 判断是否匹配
使用 regex.ismatch 方法判断字符串是否符合某个模式:
using system;
using system.text.regularexpressions;
class program
{
static void main()
{
string pattern = @"^\d{4}-\d{2}-\d{2}$";
string date = "2026-08-31";
bool isvalid = regex.ismatch(date, pattern);
console.writeline($"日期格式是否正确:{isvalid}");
}
}3.2 提取匹配内容
使用 regex.match 或 regex.matches 提取匹配的文本:
using system;
using system.text.regularexpressions;
class program
{
static void main()
{
string text = "联系电话:138-1234-5678,备用:139-8765-4321";
string pattern = @"1[3-9]\d-\d{4}-\d{4}";
matchcollection matches = regex.matches(text, pattern);
foreach (match match in matches)
{
console.writeline($"找到号码:{match.value}");
}
}
}3.3 字符串替换
使用 regex.replace 方法替换匹配的内容:
using system;
using system.text.regularexpressions;
class program
{
static void main()
{
string text = "今天是2026年8月31日,明天是2026年9月1日";
string pattern = @"\d{4}年\d{1,2}月\d{1,2}日";
string result = regex.replace(text, pattern, "某年某月某日");
console.writeline(result);
}
}4. 分组与捕获
使用圆括号可以将正则表达式的一部分分组,并捕获匹配的内容。这在提取结构化数据时非常有用:
using system;
using system.text.regularexpressions;
class program
{
static void main()
{
string text = "姓名:张三,年龄:25;姓名:李四,年龄:30";
string pattern = @"姓名:(\w+),年龄:(\d+)";
matchcollection matches = regex.matches(text, pattern);
foreach (match match in matches)
{
string name = match.groups[1].value;
string age = match.groups[2].value;
console.writeline($"姓名:{name},年龄:{age}");
}
}
}5. 常用正则表达式示例
下面整理了一些开发中常用的正则表达式模式:
| 用途 | 正则表达式 |
|---|---|
| 邮箱地址 | ^[\w.-]+@[\w-]+(\.[\w-]+)+$ |
| 手机号码 | ^1[3-9]\d{9}$ |
| 身份证号 | ^\d{17}[\dxx]$ |
| ip 地址 | ^(\d{1,3}\.){3}\d{1,3}$ |
| url 地址 | ^https?://[\w.-]+(:\d+)?(/[\w./?%&=-]*)?$ |
| 中文字符 | ^[\u4e00-\u9fa5]+$ |
6. 性能优化建议
在处理大量文本或频繁调用正则表达式时,建议注意以下几点:
- 使用静态方法:
regex.ismatch、regex.match等静态方法内部会缓存编译结果,适合少量调用场景。 - 使用实例方法:当需要多次使用同一模式时,创建
regex实例并复用,避免重复编译。 - 使用 compiled 选项:对高频使用的正则表达式,可在构造时传入
regexoptions.compiled提升匹配速度。 - 避免灾难性回溯:谨慎使用嵌套量词(如
(a+)+),可能导致性能急剧下降。
7. 总结
正则表达式是 c# 开发中不可或缺的技能。掌握基础语法、熟悉常用模式,并注意性能优化,就能在文本处理场景中游刃有余。建议读者结合本文示例动手实践,逐步积累自己的正则表达式库。
到此这篇关于c# 正则表达式:从入门到实战的文章就介绍到这了,更多相关c# 正则表达式入门内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论