当前位置: 首页 > web >正文

常用正则记录

在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)等。


总结

正则表达式是一种灵活且强大的工具,适用于各种字符串处理任务。通过组合不同的元字符和模式,可以实现复杂的匹配逻辑。在实际开发中,应根据具体需求选择合适的正则表达式,并注意其性能和可读性。

http://www.xdnf.cn/news/6327.html

相关文章:

  • 抽奖系统-奖品-活动
  • 外贸礼品禁忌
  • 【SSL证书系列】SSL证书工作原理解读
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(21):复习
  • 【测试开发知识储备】之Jacoco(Java Code Coverage)
  • SVNAdmin管理使用教程
  • Problem E: List练习
  • 力扣刷题(第二十六天)
  • 运筹说 第136期 | 其他类型对策简介之合作对策
  • BGP联邦和发射试验
  • Linux wlan 单频段 dual wifi创建
  • git中忽略文件.gitignore文件的用法
  • 2025年AI开发者在开发者占比?
  • 进阶2_1:QT5多线程与定时器共生死
  • 深度剖析火狐飞鸟 MIP 泛目录程序:技术原理与实践应用
  • .NET程序启动就报错,如何截获初期化时的问题json
  • E. 23 Kingdom【Codeforces Round 1024 (Div. 2)】
  • 1669上什么课
  • day29-IO(其他流)
  • Java基础(多线程1)
  • 鸿蒙-5.1.0-release构建编译环境
  • 分割等和子集习题分析
  • HCIP(OSPF的拓展配置及选路规则)
  • 矩阵乘法的优化与复杂度分析
  • 一个日志量突增的问题分析处理经历
  • 普通IT的股票交易成长史--20250514复盘
  • 机器学习任务的常用评估指标
  • JVM内存模型
  • 前端面试题:vue3 为什么不需要时间分片?
  • Linux程序设计--期末复习