在C#中,正则表达式断言提供了一种强大的方式来指定字符串中的某个位置必须满足的条件,而这些条件并不会被包含在最终的匹配结果中。断言通常用于复杂的字符串匹配任务,它们可以帮助我们在匹配过程中实现更精确的控制。本文将介绍C#正则表达式中的几种常见断言,并通过具体的例子来演示它们的用法。
前瞻断言用于检查当前匹配位置之后的文本,分为正向前瞻断言和负向前瞻断言。
正向前瞻断言(?=...)用于断言某个模式必须出现在当前匹配位置的后面,但不会被包含在匹配结果中。
示例:匹配后面跟着“元”的数字
C#string pattern = @"\d+(?=元)";
string input = "这件衣服的价格是100元,而那件衣服的价格是200元。";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
Console.WriteLine($"匹配到的价格数字:{match.Value}");
}
在 C# 中,正则表达式不仅仅是用来检查字符串是否符合特定模式,它们还可以用于提取、操作和替换字符串中的子字符串。这是通过正则表达式中的“分组”和“捕获”功能实现的。本文将详细介绍 C# 中的正则表达式分组和捕获,并通过多个示例来展示其强大的功能。
分组是通过将一部分正则表达式括在圆括号 () 内来创建的。这允许你将多个字符视为单个单元,并对它们应用量词,或者从匹配的字符串中提取信息。
C#using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string pattern = "(dog|cat|fish)";
string input = "I have a dog, a cat, and a goldfish.";
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine($"Found a pet: {match.Value}");
}
}
}
输出:
C#Found a pet: dog Found a pet: cat Found a pet: fish
在C#中,事件是一种使类或对象能够通知其他类或对象发生了某些事情的机制。它基于委托(Delegate)和事件(Event)的发布/订阅模式。事件发布者负责声明事件并触发它,而事件订阅者则负责处理事件。
在创建事件之前,首先需要声明一个委托类型,它定义了事件处理程序的签名。
C#public delegate void EventHandler(string message);
使用委托,我们可以声明一个事件。
C#public class Publisher
{
// 声明事件
public event EventHandler OnPublish;
// 触发事件的方法
public void Publish(string message)
{
// 检查是否有订阅者
if (OnPublish != null)
{
OnPublish(message);
}
}
}
在C#中,委托是一种类型,它安全地封装了一个方法的引用。委托可以用来实现回调函数和事件订阅。C# 提供了两种内置的委托类型:Action 和 Func。这些内置委托使得代理使用起来更加简单和灵活,有了这个基本不用自己声明delegate 了。
Action 是一个不返回值的委托类型,它可以有0到16个参数。当你需要一个执行操作但不返回结果的委托时,可以使用 Action。
C#namespace AppActionFunc
{
internal class Program
{
static void Main(string[] args)
{
Action printHello = () => Console.WriteLine("Hello, World!");
printHello();
Console.ReadKey();
}
}
}
在 C# 中,事件是一种使类或对象能够通知其他类或对象发生了某些情况的机制。它们是基于委托的发布-订阅模式的实现。事件处理器(也称为事件监听器)是响应事件发生而被调用的方法,其实想明白了都是方法的回调,这块很重要,现在的开发基本以这种模式居多了。
在 C# 中,事件是使用委托类型来声明的。委托定义了事件处理器的签名,即事件处理器需要匹配的参数类型和返回类型。
C#// 定义事件处理器委托
public delegate void EventHandler(object sender, EventArgs e);
C#public class Publisher
{
// 使用 EventHandler 委托声明事件
public event EventHandler MyEvent;
// 触发事件的方法
protected virtual void OnMyEvent()
{
// 如果有方法订阅了事件,则调用
MyEvent?.Invoke(this, EventArgs.Empty);
}
}