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

2024-06-13 04:52

本文主要是介绍在.NET Core,除了VB的LikeString,还有其它方法吗?(四种LikeString实现分享),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

  1. Operators.LikeString 方法

方法描述:表示 Visual Basic 的 Like 运算符,对给定的两个字符串执行二进制字符串或文本字符串比较。

平台兼容性:该方法由Microsoft.VisualBasic.dll库提供,仅在.NET Framework平台下支持。

参考链接:Operators.LikeString(String, String, CompareMethod) Method (Microsoft.VisualBasic.CompilerServices) | Microsoft Learn

源码链接:

  1. LikeOperator.LikeString 方法

方法描述:对给定的两个字符串执行二进制字符串或文本字符串比较。

平台兼容性:该方法由Microsoft.VisualBasic.Core.dll提供,在.NET Framework和.NET Core 3.0+以上平台都支持。

参考链接:LikeOperator.LikeString(String, String, CompareMethod) Method (Microsoft.VisualBasic.CompilerServices) | Microsoft Learn

源码链接:https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.VisualBasic.Core/src/Microsoft/VisualBasic/CompilerServices/LikeOperator.vb

  1. FileSystemName.MatchesSimpleExpression 方法

方法描述:验证给定表达式是否与给定名称匹配。支持以下通配符:“*”and“?”。反斜杠字符“\”将转义。

平台兼容性:该方法由System.Private.CoreLib.dll提供,在.NET Standard 2.1和.NET Core 2.1+以上平台都支持。

参考链接:FileSystemName.MatchesSimpleExpression Method (System.IO.Enumeration) | Microsoft Learn

源码链接:https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/IO/Enumeration/FileSystemName.cs

  1. 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 运算符介绍:Like Operator - Visual Basic | Microsoft Learn

附上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);}
}

文章转载自:VAllen

原文链接:https://www.cnblogs.com/VAllen/p/18243038/Are-there-any-other-methods-besides-VB-LikeString-in-the-dotNET-Core

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

这篇关于在.NET Core,除了VB的LikeString,还有其它方法吗?(四种LikeString实现分享)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056333

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[职场] 护理专业简历怎么写 #经验分享#微信

护理专业简历怎么写   很多想成为一名护理方面的从业者,但是又不知道应该怎么制作一份简历,现在这里分享了一份护理方面的简历模板供大家参考。   蓝山山   年龄:24   号码:12345678910   地址:上海市 邮箱:jianli@jianli.com   教育背景   时间:2011-09到2015-06   学校:蓝山大学   专业:护理学   学历:本科

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

电脑不小心删除的文件怎么恢复?4个必备恢复方法!

“刚刚在对电脑里的某些垃圾文件进行清理时,我一不小心误删了比较重要的数据。这些误删的数据还有机会恢复吗?希望大家帮帮我,非常感谢!” 在这个数字化飞速发展的时代,电脑早已成为我们日常生活和工作中不可或缺的一部分。然而,就像生活中的小插曲一样,有时我们可能会在不经意间犯下一些小错误,比如不小心删除了重要的文件。 当那份文件消失在眼前,仿佛被时间吞噬,我们不禁会心生焦虑。但别担心,就像每个问题

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主