首页 > 编程语言 >C# 正则表达式

C# 正则表达式

时间:2025-01-17 14:32:30浏览次数:3  
标签:匹配 string C# System 正则表达式 input 字符串 using

C#中正则表达式的详细讲解,包括基本概念、常用方法和一些示例。

基本概念

正则表达式(Regular Expression,简称Regex)是一种用于匹配字符串的模式。正则表达式可以用来检查一个字符串是否符合某种模式、提取匹配的子字符串、替换匹配的子字符串等。

命名空间

在C#中,正则表达式相关的类位于 System.Text.RegularExpressions 命名空间中。因此,使用正则表达式时需要引入这个命名空间:

using System.Text.RegularExpressions;

常用类

  1. Regex:表示不可变正则表达式模式。提供静态方法来执行匹配、替换等操作。
  2. Match:表示单个匹配结果。
  3. MatchCollection:表示多个匹配结果的集合。
  4. Group:表示单个捕获的子匹配。
  5. GroupCollection:表示多个捕获的子匹配的集合。

常用方法

  1. Regex.IsMatch:检查字符串是否包含与指定正则表达式匹配的子字符串。
  2. Regex.Match:在字符串中查找与指定正则表达式匹配的第一个子字符串。
  3. Regex.Matches:在字符串中查找与指定正则表达式匹配的所有子字符串。
  4. Regex.Replace:使用指定的替换字符串替换与指定正则表达式匹配的子字符串。
  5. Regex.Split:使用正则表达式将字符串拆分为子字符串数组。

示例

1. 检查字符串是否匹配
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "Hello, World!";
        string pattern = "Hello";

        bool isMatch = Regex.IsMatch(input, pattern);
        Console.WriteLine(isMatch); // 输出: True
    }
}
2. 查找第一个匹配
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "Hello, World!";
        string pattern = "Hello";

        Match match = Regex.Match(input, pattern);
        if (match.Success)
        {
            Console.WriteLine(match.Value); // 输出: Hello
        }
    }
}
3. 查找所有匹配
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "Hello, World! Hello, C#!";
        string pattern = "Hello";

        MatchCollection matches = Regex.Matches(input, pattern);
        foreach (Match match in matches)
        {
            Console.WriteLine(match.Value); // 输出: Hello, Hello
        }
    }
}
4. 替换匹配的子字符串
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "Hello, World!";
        string pattern = "World";
        string replacement = "C#";

        string result = Regex.Replace(input, pattern, replacement);
        Console.WriteLine(result); // 输出: Hello, C#!
    }
}
5. 拆分字符串
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "one,two,three";
        string pattern = ",";

        string[] parts = Regex.Split(input, pattern);
        foreach (string part in parts)
        {
            Console.WriteLine(part); // 输出: one, two, three
        }
    }
}

正则表达式模式

正则表达式模式是由字符和元字符组成的字符串。以下是一些常用的元字符和模式:

  • .:匹配任何单个字符(除了换行符)。
  • *:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • []:匹配指定范围内的任何单个字符。
  • ():用于分组。
  • ^:匹配字符串的开始。
  • $:匹配字符串的结束。
  • \d:匹配任何数字(等同于 [0-9])。
  • \D:匹配任何非数字(等同于 [^0-9])。
  • \w:匹配任何字母数字字符(等同于 [a-zA-Z0-9_])。
  • \W:匹配任何非字母数字字符(等同于 [^a-zA-Z0-9_])。
  • \s:匹配任何空白字符(包括空格、制表符、换行符等)。
  • \S:匹配任何非空白字符。

示例:匹配 [X,X,X,X] 格式的字符串

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "这是测试字符串 [1,2,3,4] 这里还有另一个 [5.5,6.6,7.7,8.8] 结束";
        List<string> matches = FindPatternMatches(input);

        foreach (var match in matches)
        {
            Console.WriteLine(match);
        }
    }

    static List<string> FindPatternMatches(string input)
    {
        // 定义正则表达式模式,匹配 [X,X,X,X] 
        string pattern = @"\[(.*?)\]";
        // 使用正则表达式匹配输入字符串
        MatchCollection matches = Regex.Matches(input, pattern);
        // 存储匹配结果,去掉方括号
        List<string> result = new List<string>();

        foreach (Match match in matches)
        {
            // 去掉方括号
            string cleanedMatch = match.Value.Trim('[', ']');
            result.Add(cleanedMatch);
        }

        return result;
    }
}

标签:匹配,string,C#,System,正则表达式,input,字符串,using
From: https://blog.csdn.net/zhwanwangwang/article/details/145206860

相关文章

  • AI绘画模型王者归来,majicFlus 模型重磅发布!
    要说SD社区中最受欢迎的大模型,那就必然是麦橘系列了——SD1.5时代的神,majicMIXrealistic麦橘写实模型更是一口气霸占了lib社区最热、最多运行、最多下载三榜第一、最多返图(第二),光lib一个平台就将近1500w的在线运行量,26w的下载量,以往大家说的一脸AI很大程度上......
  • Spark 源码解析(二) 根据 SparkRpc 自己动手实践一个跨节点通信
     目录一、框架流程:二、Maven搭建Scala导入POM依赖三、根据流程进行编写1、实例 Master2、创建 RpcEnv3、创建RpcEndpoint4、生成RpcEndpointRef5、RpcEndpointRef发送消息 6、防止还没收到消息程序就结束运行7、验证一下,看看结果四、完整代码一、框架......
  • 2025年必知的Meta(Facebook)广告趋势与技巧!
     Meta广告作为全球最主要的数字广告平台之一,对于许多跨境出海企业来说,关注Meta广告优化趋势是获客的关键之一。过去一年Meta优化步伐渐紧,展望2025年将不断涌现新的趋势和技巧。本文将深入分析2025年Meta广告的关键趋势,帮助广告主在2025年提高投放效果。一、2025Meta广告新趋......
  • ReadCat阅读器吾爱置顶的神器,好评如潮速度收藏!(附书源)
            你是否还能回想起曾经在课堂上偷偷看小说的时光呢?那种既紧张又兴奋的情绪,就好像刚刚发生过一样。小说于我们而言,不但是舒缓情绪的妙方,更是我们精神世界不可或缺的一部分。 瞧,如今我们已不必再在桌下偷偷摸摸看小说了,可打工人忙碌的生活却让我们很难有时间尽......
  • elasticsearch之数据聚合
    **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如:什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售情况如何?实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近实时搜索效果。聚合的种......
  • [docker逃逸] 使用DirtyPipe漏洞逃逸
    本文作者CVE-柠檬iCSDN:https://blog.csdn.net/weixin_49125123博客园:https://www.cnblogs.com/CVE-Lemon微信公众号:Lemon安全前言本文使用代码下载链接:利用CVE-2022-0847(DirtyPipe)实现容器逃逸(github.com)由于本人才疏学浅,本文不涉及漏洞原理,仅有复现。本文是通过利......
  • Top Down 2D Dojo Chip Set
     以下是对这款2D微型像素关卡芯片集的简洁介绍:这是一款基于8x8像素网格的2D微型像素关卡芯片集,采用经典的像素风格。它包含66个.png格式的芯片,涵盖多种墙壁和门的变体,非常适合用于快速搭建游戏原型的道场关卡。利用这些丰富的像素资源,可以轻松创建出风格独特的格斗......
  • 【通讯协议】OPC协议
    OPC通讯协议特点:支持多种数据结构和负责数据类型,需要多的硬件和软件资源,成本较高,安全性较高。应用场景:连接多个不同工业自动化设备什么是OPC通讯协议OPC是英文“OLEforProcessControl”的缩写,是工业自动化领域中的一种工业通信标准。它通过定义一些在不同平台上具有通用性......
  • Python魔法方法深度解析:解密 __call__、__new__ 和 __del__
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在Python中,魔法方法(MagicMethods)是一些特殊的方法,它们允许开发者定制对象的行为。这些方法前后由双下划线包围,如__init__、__str__、__call_......
  • 【c++】【算法】【动态规划】最长公共子序列
    【c++】【算法】【动态规划】最长公共子序列//递归方式//最长公共子序//直接递归求最长公共子序长度intFindValue(conststring&X,conststring&Y,inti,intj){ if(i==0||j==0)return0; if(X[i]==Y[j])returnFindValue(X,Y,i-1,j-1)+1; ......