C#开发基础之100个常用的C#正则表达式

前言

正则表达式是处理字符串的强大工具,特别是在文本搜索、替换和验证中。本文将100个常用的C#正则表达式进行分类,以帮助我们更快速地找到适合的正则表达式解决方案。

1. 基础匹配

这些正则表达式用于匹配一些基本的字符或字符串模式。

  • 匹配任意字符 : string pattern = ".";
  • 匹配任意空白字符 : string pattern = @"\s";
  • 匹配任意非空白字符 : string pattern = @"\S";
  • 匹配任意数字字符 : string pattern = @"\d";
  • 匹配任意非数字字符 : string pattern = @"\D";
  • 匹配任意字母数字字符 : string pattern = @"\w";
  • 匹配任意非字母数字字符 : string pattern = @"\W";
  • 匹配任意字母字符 : string pattern = @"[a-zA-Z]";
  • 匹配任意小写字母 : string pattern = @"[a-z]";
  • 匹配任意大写字母 : string pattern = @"[A-Z]";

2. 数字处理

这些正则表达式用于匹配和处理数字相关的字符串。

  • 匹配单个数字 : string pattern = @"\d";
  • 匹配多位数字 : string pattern = @"\d+";
  • 匹配十六进制数字 : string pattern = @"\b[0-9A-Fa-f]+\b";
  • 匹配包含数字的字符串 : string pattern = @"\b\d+\b";
  • 匹配前导零的数字 : string pattern = @"\b0*(\d+)\b";
  • 匹配负数 : string pattern = @"^-?\d+$";

3. 字符串匹配

这些正则表达式用于匹配特定类型的字符串,如以某个字符开头或结尾的字符串。

  • 匹配以特定字符开头的字符串 : string pattern = @"^prefix";
  • 匹配以特定字符结尾的字符串 : string pattern = @"suffix$";
  • 匹配带连字符的单词 : string pattern = @"\b\w+-\w+\b";
  • 匹配以字母开头的字符串 : string pattern = @"^[a-zA-Z]";
  • 匹配以字母结尾的字符串 : string pattern = @"[a-zA-Z]$";
  • 匹配带点的字符串 : string pattern = @"\w+\.\w+";

4. 特殊字符处理

这些正则表达式用于处理字符串中的特殊字符和标记。

  • 匹配标点符号 : string pattern = @"[.,!?;:'""]";
  • 匹配XML或HTML中的属性 : string pattern = @"(\w+)\s*=\s*(['""]?)(.*?)\2";
  • 匹配成对的括号 : string pattern = @"\([^()]*\)";
  • 匹配成对的HTML标签 : string pattern = @"<(\w+)>.*?</\1>";
  • 匹配XML标签 : string pattern = @"<[^>]+>";

5. 空白字符处理

这些正则表达式用于处理字符串中的空白字符。

  • 匹配单个空白字符 : string pattern = @"\s";
  • 匹配一个或多个空白字符 : string pattern = @"\s+";
  • 匹配行首的空白字符 : string pattern = @"^\s";
  • 匹配行尾的空白字符 : string pattern = @"\s$";
  • 匹配首尾带空格的字符串 : string pattern = @"^\s+|\s+$";
  • 匹配具有多个空格的行 : string pattern = @"^\s+.*\s+$";

6. 行和段落处理

这些正则表达式适用于多行文本的处理,如匹配特定的行或段落。

  • 匹配整行文本 : string pattern = @"^.*$";
  • 匹配行首的字符串 : string pattern = @"^prefix";
  • 匹配行尾的字符串 : string pattern = @"suffix$";
  • 匹配多行字符串中的最后一行 : string pattern = @"(\n.*)?$";
  • 匹配非空行 : string pattern = @"\S";

7. 复杂模式匹配

这些正则表达式处理更为复杂的匹配模式,如重复字符或成对符号。

  • 匹配重复的字符 : string pattern = @"(.)\1";
  • 匹配中间带空格的字符串 : string pattern = @"\w+\s+\w+";
  • 匹配具有相同字符的连续单词 : string pattern = @"(\b\w+\b)\s+\1";

8. 日期和时间

这些正则表达式专门用于处理日期和时间格式。

  • 匹配日期格式(dd/mm/yyyy) : string pattern = @"^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/\d{4}$";

9. 特定语言字符

这些正则表达式用于处理特定语言的字符,如汉字或双字节字符。

  • 匹配双字节字符(比如中文) : string pattern = @"[^\x00-\xff]";
  • 匹配汉字字符 : string pattern = @"[\u4e00-\u9fa5]";

10. 文件和路径处理

这些正则表达式用于处理文件路径、URL等格式。

  • 匹配URL的主机部分 : string pattern = @"^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+)";
  • 匹配URL的路径部分 : string pattern = @"(?:https?:\/\/)?(?:www\.)?[^\/]+(\/[^#?]+)";

示例代码

示例代码,演示如何在C#中使用这些正则表达式。

csharp 复制代码
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string text = "Example text with some special patterns: 123-456, [email protected], http://example.com";

        // 匹配带连字符的单词
        string pattern = @"\b\w+-\w+\b";
        MatchCollection matches = Regex.Matches(text, pattern);

        Console.WriteLine("匹配带连字符的单词:");
        foreach (Match match in matches)
        {
            Console.WriteLine(match.Value);
        }

        // 匹配URL的主机部分
        pattern = @"^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n]+)";
        Match matchUrl = Regex.Match(text, pattern);

        Console.WriteLine("\n匹配URL的主机部分:");
        Console.WriteLine(matchUrl.Value);
    }
}

在这个示例中,我们展示了如何使用正则表达式来匹配带连字符的单词和URL的主机部分。可以根据自己的需求进行修改和扩展。

总结

通过对这些正则表达式进行分类,我们可以更方便地找到适合当前需求的正则表达式。在实际开发中,正则表达式不仅可以简化代码,还能提高程序的执行效率和可维护性。

相关推荐
数据智能老司机10 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机11 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
“抚琴”的人11 小时前
【机械视觉】C#+VisionPro联合编程———【六、visionPro连接工业相机设备】
c#·工业相机·visionpro·机械视觉
松果猿11 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
无名之逆11 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010111 小时前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机12 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
hzulwy12 小时前
Redis常用的数据结构及其使用场景
数据库·redis
程序猿熊跃晖12 小时前
解决 MyBatis-Plus 中 `update.setProcInsId(null)` 不生效的问题
数据库·tomcat·mybatis
FAREWELL0007513 小时前
C#核心学习(七)面向对象--封装(6)C#中的拓展方法与运算符重载: 让代码更“聪明”的魔法
学习·c#·面向对象·运算符重载·oop·拓展方法