一、IsMatch 入门
csharp
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = "2025-12-18";
string pattern = @"^\d{4}-\d{2}-\d{2}$";
bool isValid = Regex.IsMatch(input, pattern);
Console.WriteLine(isValid); // True
}
}
解析::
pattern是正则表达式,@"..."是 C# 的逐字字符串字面量。^和$:锚点,表示"从头到尾整串匹配"\d{4}:4 位数字。-:字面量"-"。Regex.IsMatch:看字符串中是不是"满足这个模式"。
二、C# Regex 的 5 个核心方法
在 System.Text.RegularExpressions.Regex 里,最常用的就是这 5 个方法:
IsMatchMatchMatchesReplaceSplit
三、Regex.IsMatch:最常用的"判断是否匹配"
IsMatch 是表单校验、输入合法性检查中使用频率最高的方法。
csharp
bool isEmail = Regex.IsMatch(email, pattern);
示例:
csharp
string input = "Order12345";
string pattern = @"\d{3}";
bool has3Digits = Regex.IsMatch(input, pattern); // True
注意点:
- 默认只要"包含"满足 pattern 的子串,就返回 true,并不要求整个字符串都完全匹配。
- 如果你想"整个字符串必须符合这个规则",要在 pattern 外面加上
^和$:
csharp
// 只允许由 3~5 位数字组成,不允许多一个字符
string pattern = @"^\d{3,5}$";
四、Regex.Match:获取第一个匹配
csharp
string text = "My phone is 123-456-7890.";
string pattern = @"\d{3}-\d{3}-\d{4}";
Match match = Regex.Match(text, pattern);
if (match.Success)
{
Console.WriteLine(match.Value); // "123-456-7890"
Console.WriteLine(match.Index); // 起始索引
Console.WriteLine(match.Length); // 匹配的长度
}
常用成员:
match.Success:是否匹配成功。match.Value:匹配到的字符串。match.Index:匹配在原文本中的起始位置(从 0 开始)。match.Length:长度。
Regex.Match 也有带起始位置、带 RegexOptions 的重载:
五、Regex.Matches:获取所有匹配结果(多个)
csharp
string text = "ID: 100, 200, 300";
string pattern = @"\d+";
MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match m in matches)
{
Console.WriteLine($"{m.Value} at {m.Index}");
}
// 输出:
// 100 at 4
// 200 at 9
// 300 at 14
解析:
- 返回的是一个
MatchCollection,可以foreach遍历。 - 每个
Match和前面一样,有Value、Index、Groups等属性。
六、Regex.Replace:按模式搜索并替换
Regex.Replace 和字符串的 Replace 很像,但支持模式匹配。
1. 固定字符串替换匹配内容
csharp
string input = "2025/12/18";
string pattern = @"/";
string result = Regex.Replace(input, pattern, "-");
Console.WriteLine(result); // "2025-12-18"
这相当于"把所有 / 都换成 -",和 input.Replace("/", "-") 类似,但 pattern 可以写得更复杂。
2.用捕获组重排内容
csharp
string input = "2025-12-18";
string pattern = @"(\d{4})-(\d{2})-(\d{2})";
// 把 yyyy-MM-dd 改成 dd/MM/yyyy
string result = Regex.Replace(input, pattern, "$3/$2/$1");
// result: "18/12/2025"
解析:
这里的 $1、$2、$3 是捕获组
3. 更高级的 MatchEvaluator 版本
csharp
string input = "Price: 100 USD, 200 USD";
string pattern = @"(\d+)\s*USD";
string result = Regex.Replace(input, pattern, m =>
{
int value = int.Parse(m.Groups[1].Value);
int converted = (int)(value * 7.2); // 假设汇率
return $"{converted} CNY";
});
Console.WriteLine(result);
// "Price: 720 CNY, 1440 CNY"
七、Regex.Split:按"模式"切割字符串
可以实现多分隔符的切割
csharp
string input = "apple, banana; cherry|date";
string pattern = @"[,;|]\s*"; // 逗号;分号;竖线 + 可选空白
string[] parts = Regex.Split(input, pattern);
foreach (var p in parts)
{
Console.WriteLine(p);
}
// apple
// banana
// cherry
// date
八、正则基础语法(一):字面字符与转义
1. 字面字符
绝大多数普通字符在正则里就是字面意思:
- 模式:
abc→ 匹配文本中出现的abc。 - 模式:
hello→ 匹配文本中出现的hello。
2. 特殊字符(元字符)
这些字符在正则中有特殊含义:
.^$*+?()[]{}\|
如果你要匹配其中任意一个"字面意义上的"字符,就要用 \ 转义。
例如:
- 匹配一个点号
.→ 模式\. - 匹配一个星号
*→ 模式\* - 匹配一对括号
(abc)→ 模式\(+abc+\)
在 C# 中配合逐字字符串:
csharp
string pattern = @"\."; // 匹配 "."
string pattern2 = @"\*"; // 匹配 "*"
如果不用 @:
csharp
string pattern = "\\."; // C# 字符串里写成 "\\." 才表示一个反斜杠+点
实践中几乎所有正则字符串都用 @"",可以少一半反斜杠。
九、正则基础语法(二):预定义字符类 \d / \w / \s
预定义字符类是正则里最常用的工具,它们代表一类字符。
1. \d / \D:数字与非数字
\d:digit,匹配 0--9 的任意一位数字,相当于[0-9]。\D:非数字,相当于[^0-9]。
示例:匹配一个或多个数字
csharp
string pattern = @"\d+";
2. \w / \W:单词字符与非单词字符
\w:word,匹配字母、数字和下划线,相当于[A-Za-z0-9_]。\W:非\w。
示例:匹配"单词"(一串字母数字下划线)
csharp
string pattern = @"\w+";
3. \s / \S:空白字符与非空白字符
\s:space,匹配空格、制表符、换行等所有空白字符。\S:非空白。
示例:
csharp
string pattern = @"\s+"; // 匹配一个或多个空白
结语
点个赞,关注我获取更多实用 C# 技术干货!如果觉得有用,记得收藏本文