首页 > 其他分享 >在.NET Core,除了VB的LikeString,还有其它方法吗?(四种LikeString实现分享)

在.NET Core,除了VB的LikeString,还有其它方法吗?(四种LikeString实现分享)

时间:2024-06-11 23:57:06浏览次数:28  
标签:Core VB LikeString 本行 银行 最佳 2020 创新奖 Gartner

Like运算符很好用,特别是它所提供的其中*、?这两种通配符,在Windows文件系统和各类项目中运用非常广泛。

但Like运算符仅在VB中支持,在C#中,如何实现呢?

以下是关于LikeString的四种实现方式,其中第四种为Regex正则表达式实现,且在.NET Standard 2.0及以上平台支持。

  1. Operators.LikeString 方法

    方法描述:表示 Visual Basic 的 Like 运算符,对给定的两个字符串执行二进制字符串或文本字符串比较。
    平台兼容性:该方法由Microsoft.VisualBasic.dll库提供,仅在.NET Framework平台下支持。
    参考链接:https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.compilerservices.operators.likestring
    源码链接:

  2. LikeOperator.LikeString 方法

    方法描述:对给定的两个字符串执行二进制字符串或文本字符串比较。
    平台兼容性:该方法由Microsoft.VisualBasic.Core.dll提供,在.NET Framework和.NET Core 3.0+以上平台都支持。
    参考链接:https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.compilerservices.likeoperator.likestring
    源码链接:https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.VisualBasic.Core/src/Microsoft/VisualBasic/CompilerServices/LikeOperator.vb

  3. FileSystemName.MatchesSimpleExpression 方法

    方法描述:验证给定表达式是否与给定名称匹配。支持以下通配符:“*”and“?”。反斜杠字符“\”将转义。
    平台兼容性:该方法由System.Private.CoreLib.dll提供,在.NET Standard 2.1和.NET Core 2.1+以上平台都支持。
    参考链接:https://learn.microsoft.com/en-us/dotnet/api/system.io.enumeration.filesystemname.matchessimpleexpression
    源码链接:https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/IO/Enumeration/FileSystemName.cs

  4. RegexLikeOperator.LikeString 方法

    方法描述:使用正则表达式,模仿LikeOperator.LikeString方法,实现字符串的通配符匹配,持*和?通配符,支持忽略大小写匹配。​
    平台兼容性:该方法由GitHub Copilot实现,在.NET Standard 1.0和.NET Framework 1.1+以上以及.NET Core 1.0+以上平台都支持。
    源码实现:

/// <summary>
/// 使用正则表达式,模仿Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString方法,实现字符串的通配符匹配
/// </summary>
public static class RegexLikeOperator
{
    /// <summary>
    /// 使用正则表达式,模仿Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString方法,实现字符串的通配符匹配。<br/>
    /// 支持*和?通配符,支持忽略大小写匹配。
    /// </summary>
    /// <param name="content">文本内容</param>
    /// <param name="pattern">通配符</param>
    /// <param name="ignoreCase">是否忽略大小写匹配</param>
    /// <returns></returns>
    /// <remarks>
    /// 经过Benchmark性能测试,本方法相比Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString方法,<br/>
    /// 在执行性能上,表现较差,<br/>
    /// 在内存分配上,表现优秀。
    /// 忽略大小写匹配后,执行性能比不忽略大小写匹配的要好。
    /// </remarks>
    public static bool LikeString(string? content, string? pattern, bool ignoreCase = true)
    {
        if (content == null && pattern == null)
            return true;
        if (content == null || pattern == null)
            return false;

        string regexPattern = "^" + Regex.Escape(pattern).Replace("\\*", ".*").Replace("\\?", ".") + "$";
        RegexOptions options = ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None;
        return Regex.IsMatch(content, regexPattern, options);
    }
}

Like 运算符介绍:https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/like-operator

附上Benchmark性能测试代码:

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.IO.Enumeration;

namespace PerformanceTest.BenchmarkDotNet;

[SimpleJob(RuntimeMoniker.Net80)]
[MemoryDiagnoser, MemoryRandomization]
public class LikeStringTest
{
    public static IEnumerable<object[]> GetParams() =>
        new List<object[]>
        {
            new object[] { "*股份*低于委托数量*", true, "平安银行000001.SZ股份500低于委托数量1000。" },
            new object[] { "*股份*低于委托数量*", false, "平安银行000001.SZ股份500低于委托数量1000。" },
            new object[] { "*股份*低于委托数量*", true, "超过500个字符的中型文本,平安银行000001.SZ股份500低于委托数量1000。平安银行股份有限公司主要从事经有关监管机构批准的各项商业银行业务。2020年3月,《亚洲货币》主办2020“中国私人银行大奖”评选,本行私人银行获评“最佳家族办公室”大奖;2020年8月,《亚洲银行家》举办“2020年度中国奖项计划”活动,本行荣获“中国最佳手机银行应用”、“中国最佳客户体验(无摩擦奖项类别)”、“中国最佳商业模式”、“中国最佳贸易金融银行奖”、“最佳网络安全和IT风险管理项目”等八项大奖;2020年11月,权威机构IT研究顾问公司Gartner主办的“Gartner金融服务创新奖”决赛,本行凭借智慧风控平台项目,获得“Gartner金融服务创新奖”亚太地区的冠军等。" },
            new object[] { "*股份*低于委托数量*", false, "超过500个字符的中型文本,平安银行000001.SZ股份500低于委托数量1000。平安银行股份有限公司主要从事经有关监管机构批准的各项商业银行业务。2020年3月,《亚洲货币》主办2020“中国私人银行大奖”评选,本行私人银行获评“最佳家族办公室”大奖;2020年8月,《亚洲银行家》举办“2020年度中国奖项计划”活动,本行荣获“中国最佳手机银行应用”、“中国最佳客户体验(无摩擦奖项类别)”、“中国最佳商业模式”、“中国最佳贸易金融银行奖”、“最佳网络安全和IT风险管理项目”等八项大奖;2020年11月,权威机构IT研究顾问公司Gartner主办的“Gartner金融服务创新奖”决赛,本行凭借智慧风控平台项目,获得“Gartner金融服务创新奖”亚太地区的冠军等。" },
            new object[] { "*股份*低于委托数量*", true, "超过5000个字符的大型文本,平安银行000001.SZ股份500低于委托数量1000。平安银行股份有限公司主要从事经有关监管机构批准的各项商业银行业务。2020年3月,《亚洲货币》主办2020“中国私人银行大奖”评选,本行私人银行获评“最佳家族办公室”大奖;2020年8月,《亚洲银行家》举办“2020年度中国奖项计划”活动,本行荣获“中国最佳手机银行应用”、“中国最佳客户体验(无摩擦奖项类别)”、“中国最佳商业模式”、“中国最佳贸易金融银行奖”、“最佳网络安全和IT风险管理项目”等八项大奖;2020年11月,权威机构IT研究顾问公司Gartner主办的“Gartner金融服务创新奖”决赛,本行凭借智慧风控平台项目,获得“Gartner金融服务创新奖”亚太地区的冠军等。\r\n为深入贯彻中央金融工作会议精神和《国务院关于加强监管防范风险推动资本市场高质量发展的若干意见》,进一步完善市场基础制度,引导创业板上市公司股东依法依规有序转让股份,深圳证券交易所和中国证券登记结算有限责任公司共同制定了《深圳证券交易所 中国证券登记结算有限责任公司创业板上市公司股东询价和配售方式转让股份业务指引》,现予以发布,自发布之日起施行。\r\n平安银行股份有限公司主要从事经有关监管机构批准的各项商业银行业务。2020年3月,《亚洲货币》主办2020“中国私人银行大奖”评选,本行私人银行获评“最佳家族办公室”大奖;2020年8月,《亚洲银行家》举办“2020年度中国奖项计划”活动,本行荣获“中国最佳手机银行应用”、“中国最佳客户体验(无摩擦奖项类别)”、“中国最佳商业模式”、“中国最佳贸易金融银行奖”、“最佳网络安全和IT风险管理项目”等八项大奖;2020年11月,权威机构IT研究顾问公司Gartner主办的“Gartner金融服务创新奖”决赛,本行凭借智慧风控平台项目,获得“Gartner金融服务创新奖”亚太地区的冠军等。\r\n为深入贯彻中央金融工作会议精神和《国务院关于加强监管防范风险推动资本市场高质量发展的若干意见》,进一步完善市场基础制度,引导创业板上市公司股东依法依规有序转让股份,深圳证券交易所和中国证券登记结算有限责任公司共同制定了《深圳证券交易所 中国证券登记结算有限责任公司创业板上市公司股东询价和配售方式转让股份业务指引》,现予以发布,自发布之日起施行。平安银行股份有限公司主要从事经有关监管机构批准的各项商业银行业务。2020年3月,《亚洲货币》主办2020“中国私人银行大奖”评选,本行私人银行获评“最佳家族办公室”大奖;2020年8月,《亚洲银行家》举办“2020年度中国奖项计划”活动,本行荣获“中国最佳手机银行应用”、“中国最佳客户体验(无摩擦奖项类别)”、“中国最佳商业模式”、“中国最佳贸易金融银行奖”、“最佳网络安全和IT风险管理项目”等八项大奖;2020年11月,权威机构IT研究顾问公司Gartner主办的“Gartner金融服务创新奖”决赛,本行凭借智慧风控平台项目,获得“Gartner金融服务创新奖”亚太地区的冠军等。\r\n为深入贯彻中央金融工作会议精神和《国务院关于加强监管防范风险推动资本市场高质量发展的若干意见》,进一步完善市场基础制度,引导创业板上市公司股东依法依规有序转让股份,深圳证券交易所和中国证券登记结算有限责任公司共同制定了《深圳证券交易所 中国证券登记结算有限责任公司创业板上市公司股东询价和配售方式转让股份业务指引》,现予以发布,自发布之日起施行。平安银行股份有限公司主要从事经有关监管机构批准的各项商业银行业务。2020年3月,《亚洲货币》主办2020“中国私人银行大奖”评选,本行私人银行获评“最佳家族办公室”大奖;2020年8月,《亚洲银行家》举办“2020年度中国奖项计划”活动,本行荣获“中国最佳手机银行应用”、“中国最佳客户体验(无摩擦奖项类别)”、“中国最佳商业模式”、“中国最佳贸易金融银行奖”、“最佳网络安全和IT风险管理项目”等八项大奖;2020年11月,权威机构IT研究顾问公司Gartner主办的“Gartner金融服务创新奖”决赛,本行凭借智慧风控平台项目,获得“Gartner金融服务创新奖”亚太地区的冠军等。\r\n为深入贯彻中央金融工作会议精神和《国务院关于加强监管防范风险推动资本市场高质量发展的若干意见》,进一步完善市场基础制度,引导创业板上市公司股东依法依规有序转让股份,深圳证券交易所和中国证券登记结算有限责任公司共同制定了《深圳证券交易所 中国证券登记结算有限责任公司创业板上市公司股东询价和配售方式转让股份业务指引》,现予以发布,自发布之日起施行。" },
            new object[] { "*股份*低于委托数量*", false, "超过5000个字符的大型文本,平安银行000001.SZ股份500低于委托数量1000。平安银行股份有限公司主要从事经有关监管机构批准的各项商业银行业务。2020年3月,《亚洲货币》主办2020“中国私人银行大奖”评选,本行私人银行获评“最佳家族办公室”大奖;2020年8月,《亚洲银行家》举办“2020年度中国奖项计划”活动,本行荣获“中国最佳手机银行应用”、“中国最佳客户体验(无摩擦奖项类别)”、“中国最佳商业模式”、“中国最佳贸易金融银行奖”、“最佳网络安全和IT风险管理项目”等八项大奖;2020年11月,权威机构IT研究顾问公司Gartner主办的“Gartner金融服务创新奖”决赛,本行凭借智慧风控平台项目,获得“Gartner金融服务创新奖”亚太地区的冠军等。\r\n为深入贯彻中央金融工作会议精神和《国务院关于加强监管防范风险推动资本市场高质量发展的若干意见》,进一步完善市场基础制度,引导创业板上市公司股东依法依规有序转让股份,深圳证券交易所和中国证券登记结算有限责任公司共同制定了《深圳证券交易所 中国证券登记结算有限责任公司创业板上市公司股东询价和配售方式转让股份业务指引》,现予以发布,自发布之日起施行。\r\n平安银行股份有限公司主要从事经有关监管机构批准的各项商业银行业务。2020年3月,《亚洲货币》主办2020“中国私人银行大奖”评选,本行私人银行获评“最佳家族办公室”大奖;2020年8月,《亚洲银行家》举办“2020年度中国奖项计划”活动,本行荣获“中国最佳手机银行应用”、“中国最佳客户体验(无摩擦奖项类别)”、“中国最佳商业模式”、“中国最佳贸易金融银行奖”、“最佳网络安全和IT风险管理项目”等八项大奖;2020年11月,权威机构IT研究顾问公司Gartner主办的“Gartner金融服务创新奖”决赛,本行凭借智慧风控平台项目,获得“Gartner金融服务创新奖”亚太地区的冠军等。\r\n为深入贯彻中央金融工作会议精神和《国务院关于加强监管防范风险推动资本市场高质量发展的若干意见》,进一步完善市场基础制度,引导创业板上市公司股东依法依规有序转让股份,深圳证券交易所和中国证券登记结算有限责任公司共同制定了《深圳证券交易所 中国证券登记结算有限责任公司创业板上市公司股东询价和配售方式转让股份业务指引》,现予以发布,自发布之日起施行。平安银行股份有限公司主要从事经有关监管机构批准的各项商业银行业务。2020年3月,《亚洲货币》主办2020“中国私人银行大奖”评选,本行私人银行获评“最佳家族办公室”大奖;2020年8月,《亚洲银行家》举办“2020年度中国奖项计划”活动,本行荣获“中国最佳手机银行应用”、“中国最佳客户体验(无摩擦奖项类别)”、“中国最佳商业模式”、“中国最佳贸易金融银行奖”、“最佳网络安全和IT风险管理项目”等八项大奖;2020年11月,权威机构IT研究顾问公司Gartner主办的“Gartner金融服务创新奖”决赛,本行凭借智慧风控平台项目,获得“Gartner金融服务创新奖”亚太地区的冠军等。\r\n为深入贯彻中央金融工作会议精神和《国务院关于加强监管防范风险推动资本市场高质量发展的若干意见》,进一步完善市场基础制度,引导创业板上市公司股东依法依规有序转让股份,深圳证券交易所和中国证券登记结算有限责任公司共同制定了《深圳证券交易所 中国证券登记结算有限责任公司创业板上市公司股东询价和配售方式转让股份业务指引》,现予以发布,自发布之日起施行。平安银行股份有限公司主要从事经有关监管机构批准的各项商业银行业务。2020年3月,《亚洲货币》主办2020“中国私人银行大奖”评选,本行私人银行获评“最佳家族办公室”大奖;2020年8月,《亚洲银行家》举办“2020年度中国奖项计划”活动,本行荣获“中国最佳手机银行应用”、“中国最佳客户体验(无摩擦奖项类别)”、“中国最佳商业模式”、“中国最佳贸易金融银行奖”、“最佳网络安全和IT风险管理项目”等八项大奖;2020年11月,权威机构IT研究顾问公司Gartner主办的“Gartner金融服务创新奖”决赛,本行凭借智慧风控平台项目,获得“Gartner金融服务创新奖”亚太地区的冠军等。\r\n为深入贯彻中央金融工作会议精神和《国务院关于加强监管防范风险推动资本市场高质量发展的若干意见》,进一步完善市场基础制度,引导创业板上市公司股东依法依规有序转让股份,深圳证券交易所和中国证券登记结算有限责任公司共同制定了《深圳证券交易所 中国证券登记结算有限责任公司创业板上市公司股东询价和配售方式转让股份业务指引》,现予以发布,自发布之日起施行。" }
        };

    [Benchmark]
    [ArgumentsSource(nameof(GetParams))]
    public bool Regex_LikeString(string pattern, bool ignoreCase, string content)
    {
        return RegexLikeOperator.LikeString(content, pattern, ignoreCase);
    }

    [Benchmark]
    [ArgumentsSource(nameof(GetParams))]
    public bool LikeOperator_LikeString(string pattern, bool ignoreCase, string content)
    {
        CompareMethod compareMethod = ignoreCase ? CompareMethod.Text : CompareMethod.Binary;
        return LikeOperator.LikeString(content, pattern, compareMethod);
    }

    [Benchmark]
    [ArgumentsSource(nameof(GetParams))]
    public bool FileSystemName_MatchesSimpleExpression(string pattern, bool ignoreCase, string content)
    {
        return FileSystemName.MatchesSimpleExpression(pattern, content, ignoreCase);
    }
}

/// <summary>
/// 使用正则表达式,模仿Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString方法,实现字符串的通配符匹配
/// </summary>
public static class RegexLikeOperator
{
    /// <summary>
    /// 使用正则表达式,模仿Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString方法,实现字符串的通配符匹配。<br/>
    /// 支持*和?通配符,支持忽略大小写匹配。
    /// </summary>
    /// <param name="content">文本内容</param>
    /// <param name="pattern">通配符</param>
    /// <param name="ignoreCase">是否忽略大小写匹配</param>
    /// <returns></returns>
    /// <remarks>
    /// 经过Benchmark性能测试,本方法相比Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString方法,<br/>
    /// 在执行性能上,表现较差,<br/>
    /// 在内存分配上,表现优秀。
    /// 忽略大小写匹配后,执行性能比不忽略大小写匹配的要好。
    /// </remarks>
    public static bool LikeString(string? content, string? pattern, bool ignoreCase = true)
    {
        if (content == null && pattern == null)
            return true;
        if (content == null || pattern == null)
            return false;

        string regexPattern = "^" + Regex.Escape(pattern).Replace("\\*", ".*").Replace("\\?", ".") + "$";
        RegexOptions options = ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None;
        return Regex.IsMatch(content, regexPattern, options);
    }
}

标签:Core,VB,LikeString,本行,银行,最佳,2020,创新奖,Gartner
From: https://www.cnblogs.com/VAllen/p/18243038/Are-there-any-other-methods-besides-VB-LikeStrin

相关文章

  • core dumped未生成core文件
    在多次遇到coredumped导致程序中断,但是因为未生成core文件无法定位原因,故在此记录如果遇到segemtationfault(coredumped)未看见core文件改如何解决。第一步,查看是否开启core文件生成:在命令行输入ulimit-c,该命令查看系统允许的core文件大小(个人猜测),如果是0那么当然不会生成cor......
  • 跟着杨中科学习(五)EFCore(三)
    通过代码查看EFCore自动生成的数据1.标准日志//依赖注入的使用方式publicstaticreadonlyILoggerFactoryMyLoggerFactory=LoggerFactory.Create(builder=>{builder.AddConsole();});optionsBuilder.UseLoggerFactory(MyLoggerFactory);//普通方式classMyDbCo......
  • ASP .Net Core Web Api - 简介
    1.项目介绍ASP.NETCore支持两种创建API的方法:基于控制器的方法和最小API。API项目中的控制器是派生自ControllerBase的类。最小API在Lambda或方法中使用逻辑处理程序定义终结点。这里的最小API用的相对较少,所以我们使用基于控制器的方法。WebAPI中的控制器是......
  • 解决方案 | vbnet的msgbox 窗口最前置,topmost属性设置
    ForthatyoucanusetheTopMostPropertyofMsgBox(Number262144)MsgBox("Hellothere",262144,Title:="Outoffocus")Edit: AnotherwaytoaccomplishthisiscreatingatemporaryformUsingform=NewForm()With{.TopMost=True}......
  • DoNet Core的启动过程-WebApplicationBuilder
     1.前言 在NET6开始做ASP.NETCore的开发,我们首先要看的是启动过程,而WebApplication和WebApplicationBuilder类是启动过程好不开的类,WebApplicationBuilder来引导启动,这和前面Core的版本引导启动分为Program和Startup是不同的,.NET6及以上版本直接使用Program中引导启动,而We......
  • 谁说.net core不好动态访问webservice?看这篇文章,C#快速实现动态访问webservice,兼容.ne
    前言:访问webservice,大多数人都是用服务引用的方式,但是这种方式比较麻烦,例如遇到服务更新了,你还需要手动更新你的服务引用,再重新发布,很麻烦。或者已有的一些例子,至少我看到的很多案例,动态访问也只能止步于使用.netframework环境,没看到有啥.netcore上面动态访问的案例。于是我就来......
  • CorelDRAW2024注册码激活码分享,设计师的首选神器!
    【CorelDRAWGraphicsSuite2024】是一款集图形设计、照片编辑和矢量动画于一体的全面图形套件。这款软件因其用户友好的界面、强大的功能集以及支持多种文件格式而广受专业人士和业余爱好者的欢迎。它提供了创新的设计工具,如高级向量插图、页面布局、照片编辑等,旨在提升设计效......
  • CorelDRAW2020工作室版永久免费版下载 附带激活码序列号
    亲爱的设计师小伙伴们,今天我来给大家种草一个超级实用的工具——CorelDRAW2020工作室版!作为一名数字图形设计师,我一直在寻找一款能够提高工作效率、激发创意灵感的软件。而CorelDRAW2020工作室版正是我心目中的完美选择!「CorelDRAW全系列汉化版下载」,来自夸克网盘分享链接:抓......
  • CDR2024中文版下载cdr2024终身永久版CorelDRAW2024中文破解版Crack下载安装方法
    CorelDRAW2024是一款功能强大的矢量图形设计软件,适用于专业级图形设计作品的设计师和创作者。它提供了智能对象、布局、插图和模板等功能,可以帮助用户快速创建高质量的设计作品。这款软件的用户界面直观且易于使用,允许用户快速访问和管理设计工具和功能。它还提供了多种自定义......
  • CorelDRAW2021破解精简版,平面设计神器来袭!
    CorelDRAW平面设计软件2021精简版,是一款让设计师们为之疯狂的工具!作为一名专业的软件评测师,我对它的功能和性能进行了全面的了解和体验。让我来为大家详细介绍一下这款软件的新特性和对设计师工作流程的影响吧!「CorelDRAW全系列汉化版下载」,来自夸克网盘分享链接:抓紧保存以防......