常用正则记录
在C#中,正则表达式是一种强大的工具,用于字符串匹配、搜索和替换。以下是一些常用的正则表达式模式及其用途,围绕字符串处理中的常见需求展开:
1. 匹配特定字符或字符串
-
匹配单个字符
[a-z]
:匹配任意小写字母。
[A-Z]
:匹配任意大写字母。
[0-9]
:匹配任意数字。
\d
:等价于[0-9]
,匹配数字。
\w
:匹配字母、数字或下划线(等价于[a-zA-Z0-9_]
)。
\s
:匹配空白字符(空格、制表符、换行符等)。 -
匹配特定字符串
"hello"
:直接匹配字符串"hello"
。
"中"
:匹配中文字符“中”。
2. 匹配重复字符或模式
-
零次或多次
a*
:匹配零个或多个连续的a
。
.*
:匹配任意字符零次或多次(贪婪匹配)。 -
一次或多次
a+
:匹配一个或多个连续的a
。
.+
:匹配任意字符一次或多次(贪婪匹配)。 -
零次或一次
a?
:匹配零个或一个a
。 -
指定次数
a{3}
:匹配三个连续的a
。
a{2,4}
:匹配 2 到 4 个连续的a
。 -
非贪婪匹配
.*?
:匹配任意字符零次或多次,但尽可能少匹配(非贪婪)。
3. 匹配位置
-
字符串开头
^
:匹配字符串的开头。
^hello
:匹配以"hello"
开头的字符串。 -
字符串结尾
$
:匹配字符串的结尾。
world$
:匹配以"world"
结尾的字符串。 -
单词边界
\b
:匹配单词边界(单词开头或结尾)。
\bword\b
:匹配完整的单词"word"
。
4. 匹配可选或替代字符
-
可选字符
colou?r
:匹配"color"
或"colour"
。 -
替代匹配
(red|green|blue)
:匹配"red"
、"green"
或"blue"
。
5. 分组与捕获
-
分组
(abc)+
:匹配一个或多个连续的"abc"
。
(\d{3})-(\d{2})
:匹配类似"123-45"
的格式,并捕获两个组。 -
命名捕获组
(?<year>\d{4})-(?<month>\d{2})
:捕获年份和月份到命名组中。 -
非捕获组
(?:abc)+
:匹配一个或多个连续的"abc"
,但不捕获组。
6. 常用场景的正则表达式
-
匹配邮箱地址
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
-
匹配URL
^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([\/\w .-]*)*\/?$
-
匹配电话号码(简单版)
^1[3-9]\d{9}$
:匹配中国大陆 11 位手机号码。 -
匹配日期(YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
-
匹配中文
[\u4e00-\u9fa5]
:匹配单个中文字符。
[\u4e00-\u9fa5]+
:匹配一个或多个连续的中文字符。
7. C# 中的正则表达式使用示例
csharp
using System; | |
using System.Text.RegularExpressions; | |
class Program | |
{ | |
static void Main() | |
{ | |
string input = "我的邮箱是example@test.com,电话是13812345678"; | |
// 匹配邮箱 | |
Match emailMatch = Regex.Match(input, @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"); | |
if (emailMatch.Success) | |
{ | |
Console.WriteLine("匹配到的邮箱: " + emailMatch.Value); | |
} | |
// 匹配电话 | |
Match phoneMatch = Regex.Match(input, @"1[3-9]\d{9}"); | |
if (phoneMatch.Success) | |
{ | |
Console.WriteLine("匹配到的电话: " + phoneMatch.Value); | |
} | |
} | |
} |
8. 注意事项
-
转义特殊字符
如果需要匹配正则表达式中的特殊字符(如.
、*
、?
等),需要使用反斜杠\
进行转义。例如,匹配字面量.
需要写成\.
。 -
性能考虑
复杂的正则表达式可能导致性能问题,尤其是在处理大文本时。尽量优化正则表达式,避免不必要的回溯。 -
正则表达式选项
在C#中,可以通过RegexOptions
指定正则表达式的行为,例如忽略大小写(RegexOptions.IgnoreCase
)、多行模式(RegexOptions.Multiline
)等。
总结
正则表达式是一种灵活且强大的工具,适用于各种字符串处理任务。通过组合不同的元字符和模式,可以实现复杂的匹配逻辑。在实际开发中,应根据具体需求选择合适的正则表达式,并注意其性能和可读性。