c正则表达式

c# 正则表达式

在我们的程序开发中,通常需要对字符串进行各种操作,而这其中就包括了对于字符串中匹配某种规则的部分进行查找和替换。c#正则表达式就是用来解决这类问题的一种强大的工具。在c#中,处理正则表达式的类为System.Text.RegularExpressions

正则表达式的语法基础

为了成功运用正则表达式,我们需要掌握一定的正则表达式语法规则。这里简要介绍一些基础语法:

字符串匹配

  1. 普通字符:a-z、A-Z、0-9
  2. 直接量字符:\t、\n、\r、\f等

字符集

使用方括号[],匹配其中包含的任意一个字符。

示例代码:

“`C#
using System.Text.RegularExpressions;

string pattern = "[abc]"; // 用方括号中的字符匹配a、b、c中的任一字符
Regex regex = new Regex(pattern);
regex.IsMatch("a"); // True
regex.IsMatch("c"); // True
regex.IsMatch("d"); // False

<pre><code class="line-numbers">### 元字符

元字符是正则表达式语法中的特殊字符,代表一定意义的字符。常用元字符:

1. . :匹配除了换行符\n以外的任意单个字符
2. \d:匹配任意数字字符,等同于[0-9]
3. \D:匹配任意非数字字符,等同于[^0-9]
4. \w:匹配任意单个字符(汉字、字母、数字、下划线等),等同于[A-Za-z0-9_]
5. \W:匹配任意非单个字符,等同于[^A-Za-z0-9_]
6. \s:匹配任意空格、制表符等空白字符,等同于[\t\n\r\f\v]
7. \S:匹配任意非空字符,等同于[^\t\n\r\f\v]

示例代码:

“`C#
using System.Text.RegularExpressions;

string pattern = @”\d”; // 匹配任意数字字符
Regex regex = new Regex(pattern);
regex.IsMatch(“1”); // True
regex.IsMatch(“a”); // False

pattern = @”a.c”; // 匹配以a开头,c结尾,中间任意单个字符的字符串
regex = new Regex(pattern);
regex.IsMatch(“abc”); // True
regex.IsMatch(“axc”); // True
regex.IsMatch(“a\nc”); // False,换行符不被匹配

限定符

限定符指的是修饰前面元字符、字符集或者括号内的子表达式,使其重复出现的符号。常用的限定符有:

    • :匹配其前面的元素0次或多次
    • :匹配其前面的元素1次或多次
  1. ? :匹配其前面的元素0次或1次
  2. {n}:匹配其前面的元素恰好n次
  3. {n,}:匹配其前面的元素至少n次
  4. {n,m}:匹配其前面的元素至少n次,至多m次

示例代码:

“`C#
using System.Text.RegularExpressions;

string pattern = @"\d{3}"; // 匹配由3个数字组成的字符串
Regex regex = new Regex(pattern);
regex.IsMatch("123"); // True
regex.IsMatch("abc"); // False

pattern = @"ab+c"; // 匹配以a开头,以c结尾,中间至少一个b的字符串
regex = new Regex(pattern);
regex.IsMatch("abc"); // True
regex.IsMatch("abbbbbc"); // True
regex.IsMatch("ac"); // False

<pre><code class="line-numbers">### 组、子表达式

可以使用组、子表达式将正则表达式的某部分括起来,形成一个整体,方便后续使用组与子表达式查找、替换、或者引用。

示例代码:

“`C#
using System.Text.RegularExpressions;

string pattern = @”(\w+)\s+(\w+)”; // 用组匹配名字和姓氏
Regex regex = new Regex(pattern);
Match match = regex.Match(“John Smith”);
match.Groups[0].Value; // “John Smith”,整个匹配的字符串
match.Groups[1].Value; // “John”,第一个组
match.Groups[2].Value; // “Smith”,第二个组

在c#中使用正则表达式的方法

c#中使用正则表达式就是使用System.Text.RegularExpressions命名空间下的Regex类完成的。这个类提供了一系列方法来操作正则表达式:

Regex.IsMatch()

Regex.IsMatch(string input, string pattern)方法用于在给定的输入字符串中,使用指定的正则表达式模式搜索匹配项。如果找到任何匹配项,则此方法将返回true

示例代码:

“`C#
using System.Text.RegularExpressions;

string pattern = @”\d”; // 匹配任意数字字符
Regex regex = new Regex(pattern);
regex.IsMatch(“1”); // True
regex.IsMatch(“a”); // False

### Regex.Match()

`Regex.Match(string input, string pattern)`方法根据指定的模式,在输入字符串中搜索第一个匹配项。如果找到了匹配项,将返回一个`Match`对象,否则返回一个空的`Match`对象。

示例代码:

```C#
using System.Text.RegularExpressions;

string pattern = @"(\w+)\s+(\w+)"; // 用组匹配名字和姓氏
Regex regex = new Regex(pattern);
Match match = regex.Match("John Smith");
match.Groups[0].Value; // "John Smith",整个匹配的字符串
match.Groups[1].Value; // "John",第一个组
match.Groups[2].Value; // "Smith",第二个组
</code></pre>

<h3>Regex.Matches()</h3>

<code>Regex.Matches(string input, string pattern)</code>方法在输入字符串中搜索所有匹配于给定正则表达式的字符串,并返回由所有字符串构成的<code>MatchCollection</code>对象。

示例代码:


```C#
using System.Text.RegularExpressions;


string pattern = @"\d"; // 匹配任意数字字符
Regex regex = new Regex(pattern);
MatchCollection matchCollection = regex.Matches("1a2b3c");
matchCollection.Count; // 3,匹配到三个数字字符

### Regex.Replace()

`Regex.Match(string input, string pattern, string replacement)`方法搜索输入字符串中所有匹配给定的正则表达式的子串,并使用指定字符串的替换形式替换它们。

示例代码:

```C#
using System.Text.RegularExpressions;

string pattern = @"\d+"; // 匹配任意数字串
Regex regex = new Regex(pattern);
string input = "1 abc 2 xyz 3 def";
string replacement = "#";
string output = regex.Replace(input, replacement);
// output = "# abc # xyz # def"

小结

本篇文章介绍了c#中正则表达式语法基础,以及在c#中使用正则表达式的方法。通过学习和实践,你不仅可以处理各种字符串操作问题,还可以提高自己的编程效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程