正则表达式技巧篇

1、遇到需要获取一个字符串中的中文字符正则表达式

一般逻辑是使用

cs 复制代码
using System;  
using System.Text.RegularExpressions;  
  
class Program  
{  
    static void Main()  
    {  
        string input = "Hello 你好 World! 123 不包含中文的部分456 你好吗?";  
        string pattern = @"[^\u4e00-\u9fa5]+"; // 匹配一个或多个非中文字符  
  
        MatchCollection matches = Regex.Matches(input, pattern);  
  
        foreach (Match match in matches)  
        {  
            Console.WriteLine(match.Value);  
        }  
    }  
}

逆向思维:先查找出非中文字符,并替换成空,即可避免循环匹配查找

/// <summary>

///查找作者名称

/// </summary>

/// <param name="str"></param>

/// <returns></returns>

private static string MatchAuthorChar(this string str)

{

// var num = str.MatchNumber();

//查找出非中文字符,并替换成空

return Regex.Replace(str, "[^\u4e00-\u9fa5]", "").Trim();

//return str.Split('.')[1];

}

可能你会过滤到他们两个 的性能问题,这里给出总结

cs 复制代码
    1、使用 Regex.Matches 来查找所有非中文字符的连续序列。
    2、使用 Regex.Replace 来替换所有非中文字符为空字符串,以获取纯中文字符串。

关于性能,Regex.Matches 和 Regex.Replace 的性能取决于输入字符串的长度、正则表达式的复杂性以及期望的匹配次数。在您的具体场景中,Regex.Replace 可能是更高效的,因为它只需要遍历字符串一次,并将非中文字符替换为空。

但是,请注意,如果您的目的是获取字符串中的所有非中文字符序列,那么使用 Regex.Matches 是正确的。而如果您只是想要一个只包含中文字符的字符串,那么 Regex.Replace 是更好的选择。


对于性能优化,您可以考虑以下几点:

    如果您的代码在循环中多次使用相同的正则表达式模式,请考虑将 Regex 对象缓存起来,而不是每次都创建一个新的实例。
    如果您的字符串非常大,并且您只需要执行一次替换操作,那么 Regex.Replace 应该是足够快的。
    如果性能是一个关键问题,并且您经常需要处理大量数据,那么可能需要考虑使用其他技术或算法,如字符串分割和连接,而不是正则表达式。但是,在大多数情况下,正则表达式的性能是可以接受的。

2、 需要获取一个字符串中的中文或者英文字符正则表达式

仍然是获取非中文和英文的字符,然后再替换成空

cs 复制代码
using System;  
using System.Text.RegularExpressions;  
  
class Program  
{  
    static void Main()  
    {  
        string input = "Hello 你好 World! 123 不包含中文@#$%^&*()的部分456 你好吗?";  
        string pattern = @"[^\p{L}\p{M}\u4e00-\u9fa5\u3400-\u4dbf\s]"; // 匹配非中文、非英文和非空格的字符  
  
        // 使用Regex.Replace替换所有非中文、非英文和非空格的字符为空字符串  
        string result = Regex.Replace(input, pattern, "");  
  
        Console.WriteLine(result); // 输出处理后的字符串  
    }  
}
相关推荐
田井中律.15 小时前
知识图谱(关系抽取方法)【第十章】
人工智能·c#·知识图谱
周杰伦fans18 小时前
C# CAD二次开发:RotatedDimension 文字边框设置完全指南
开发语言·c#
新缸中之脑21 小时前
用Claude for Word审查法律合同
开发语言·c#·word
xuxie9921 小时前
N27 数据库UI
linux·c#
唐青枫1 天前
C#.NET TaskCompletionSource 深入解析:手动控制 Task、桥接回调事件与实战避坑
c#·.net
张人玉1 天前
VisionPro 药物检测工具 学习笔记
算法·c#·机器视觉·vsionpro
周杰伦fans1 天前
C# CAD二次开发:RotatedDimension 旋转标注完全指南
开发语言·c#
宝桥南山1 天前
Azure - 尝试一下使用Azure Developer CLI去部署应用程序
microsoft·ai·微软·c#·aigc·azure
OctShop大型商城源码1 天前
C#.NET多商户商城系统源码_OctShop:技术与机遇的融合
c#·.net·多商户商城系统源码·商城系统源码
张人玉1 天前
VisionPro 书页查找工具 学习笔记
c#·机器视觉·vsionpro