来聊聊正则表达式

概念

正则表达式 是一种匹配输入文本的模式。.Net框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。

Regex 类

Regex 类用于表示一个正则表达式。下表列出了 Regex 类中一些常用的方法:

1 public bool IsMatch( string input ) 指示 Regex 构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项。

2 public bool IsMatch( string input, int startat ) 指示 Regex 构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项,从字符串中指定的开始位置开始。

3 public static bool IsMatch( string input, string pattern ) 指示指定的正则表达式是否在指定的输入字符串中找到匹配项。

4 public MatchCollection Matches( string input ) 在指定的输入字符串中搜索正则表达式的所有匹配项。

5 public string Replace( string input, string replacement ) 在指定的输入字符串中,把所有匹配正则表达式模式的所有匹配的字符串替换为指定的替换字符串。

6 public string[] Split( string input ) 把输入字符串分割为子字符串数组,根据在 Regex 构造函数中指定的正则表达式模式定义的位置进行分割。

例子

正则表达式的完全匹配

  public override void DoJob(IJobExecutionContext context, ILifetimeScope scope, string[] args){var accountModuleMgmtService = scope.Resolve<IAccountModuleMgmtService>();// 取得所有使用過 BigCentral方案的帳號var bigCentralModuleAccountList = accountModuleMgmtService.GetList(new AccountModuleMgmtSearchViewModel(){bundleTypes = new List<string> { BundleType.BigCentral, BundleType.BigCRM, BundleType.Feedback }}).Select(m => m.Account_Module_Mgmt.Account).Distinct();test//var bigCentralModuleAccountList = new List<string>();//bigCentralModuleAccountList.Add("S_Acct_90000618");Log($"bigCentralModuleAccountList.Count(): {bigCentralModuleAccountList.Count()}");//int executingCount = 0;int completedCount = 0;int totalCount = bigCentralModuleAccountList.Count();void LogProgress(){//Console.WriteLine($"{(completedCount / (decimal)totalCount).ToString("#0.00%")}  {new { executingCount, completedCount }.ToJsonString()}");Console.WriteLine($"{(completedCount / (decimal)totalCount).ToString("#0.00%")}, completedCount: {completedCount}");}List<(Regex pattern, string replacement, bool isHtml)> replacePatternList = new List<(Regex pattern, string replacement, bool isHtml)>{(new Regex(@"{{review_image_product_contact_link:(.*?)}}"), "{{review_link_5_star:$1}}", false),(new Regex(@"{{review_feedback_image_product_contact_link:(.*?)}}"), "{{review_link_5_star:$1}}", false),(new Regex(@"{{feedback_order_store_contact_link:(.*?)}}"), "{{feedback_link_5_star:$1}}", false),(new Regex("{{image_product_name_link}}"), "{{product_name}}", false),(new Regex("{{product_name_asin_link}}"), "{{product_name_asin}}", false),(new Regex("(\\<img.*?style=['\"])([^\\>]+\\>)", RegexOptions.IgnoreCase), "$1max-width: 80% !important;$2", true),(new Regex("(max-width: 80% !important;)+", RegexOptions.IgnoreCase), "max-width: 80% !important;", true), // 移除排程多次執行,重複加入的樣式};List<(Regex pattern, string replacement, bool isHtml)> GetEffectivePatterList(string content, bool onlyText){var effectivePatternList = replacePatternList.FindAll(p => p.isHtml == (onlyText ? false : p.isHtml)).FindAll(p => p.pattern.IsMatch(content));return effectivePatternList;}bool IsMatchContent(string content, bool onlyText = false){if (string.IsNullOrWhiteSpace(content)){return false;}return GetEffectivePatterList(content, onlyText).Any();}string ReplaceContent(string content, bool onlyText = false){if (string.IsNullOrWhiteSpace(content)){return content;}var effectivePatternList = GetEffectivePatterList(content, onlyText);foreach (var (pattern, replacement, isHtml) in effectivePatternList){content = pattern.Replace(content, replacement);}return content;}

正则表达式替换内容

  int.TryParse(GetArg(args, 1, "100"), out int maxDegreeOfParallelism);var parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = maxDegreeOfParallelism };Parallel.ForEach(bigCentralModuleAccountList, parallelOptions, (account) =>{//System.Threading.Interlocked.Increment(ref executingCount); // 減少 lock縮短執行時間using (ILifetimeScope jobScope = AutofacConfig.Container.BeginLifetimeScope())using (new TimeMeasureScope($"account: {account}")){try{var setLoginStatus = jobScope.Resolve<ISetLoginStatus>(); //Login Status (Windows Service 要先執行)setLoginStatus.SetAccount(account); //執行前要先設定 Account,才能找到對應的 SCH DB#region User_Ticket_Draftvar userTicketDraftService = jobScope.Resolve<IUserTicketDraftService>();var userTicketDraftList = userTicketDraftService.getUser_Ticket_Draft(account).ToList() ?? new List<User_Ticket_Draft>();var validUserTicketDraftList = userTicketDraftList.FindAll(u =>!string.IsNullOrEmpty(u?.DraftModelJsonString));logger.Info($"{account}, userTicketDraftList.Count: {userTicketDraftList.Count}, validUserTicketDraftList: {validUserTicketDraftList.Count}");foreach (var userTicketDraft in validUserTicketDraftList){bool isUpdateUserTicketDraft = false;string unzipJsonString = StringTools.UnzipZippedText(userTicketDraft.DraftModelJsonString);List<TicketAddMessageModel> resultList = JsonConvert.DeserializeObject<List<TicketAddMessageModel>>(unzipJsonString);if (resultList?.Any() == true){foreach (var item in resultList.FindAll(r => IsMatchContent(r.Message))){item.Message = ReplaceContent(item.Message);isUpdateUserTicketDraft = true;}}if (isUpdateUserTicketDraft){string jsonString = JsonConvert.SerializeObject(resultList);string zippedJsonString = StringTools.ZipText(jsonString);userTicketDraft.DraftModelJsonString = zippedJsonString;userTicketDraft.Update_Date = DateTime.UtcNow;userTicketDraft.Update_User = nameof(ReleaseUpdate1381);userTicketDraftService.updateUser_Ticket_Draft(userTicketDraft);}}#endregion User_Ticket_Draft#region TicketTemplateSubvar ticketTemplateService = jobScope.Resolve<ITicketTemplateService>();var ticketTemplateSubList = ticketTemplateService.getTicket_Template_Sub(account).ToList() ?? new List<Ticket_Template_Sub>();var modifyTicketTemplateSubList = ticketTemplateSubList.FindAll(t =>IsMatchContent(t.Message_Html)|| IsMatchContent(t.Message_Text));logger.Info($"{account}, ticketTemplateSubList.Count: {ticketTemplateSubList.Count}, modifyTicketTemplateSubList.Count: {modifyTicketTemplateSubList.Count}");foreach (var ticketTemplateSub in modifyTicketTemplateSubList){bool isupdate = false;if (IsMatchContent(ticketTemplateSub.Message_Html)){ticketTemplateSub.Message_Html = ReplaceContent(ticketTemplateSub.Message_Html);isupdate = true;}if (IsMatchContent(ticketTemplateSub.Message_Text)){ticketTemplateSub.Message_Text = ReplaceContent(ticketTemplateSub.Message_Text);isupdate = true;}if (isupdate){ticketTemplateSub.Update_Date = DateTime.UtcNow;ticketTemplateSub.Update_User = nameof(ReleaseUpdate1381);ticketTemplateService.UpdateTicket_Template_Sub(ticketTemplateSub);}}#endregion TicketTemplateSub#region Campaign Templatevar amznFdbkMailCampaignTemplateService = jobScope.Resolve<IAmznFdbkMailCampaignTemplateService>();lock (lockObj){//刪除Campaign TemplateamznFdbkMailCampaignTemplateService.DeleteCampaignTemplate(new AmznFdbkCampaignGuidSearchModel() { Account = account });}var allCampaigns = amznFdbkMailCampaignTemplateService.GetAllAMZN_Fdbk_Mail_Campaign_Template(account).ToList() ?? new List<AMZN_Fdbk_Mail_Campaign_Template>();var modifyCampaigns = allCampaigns.FindAll(c =>IsMatchContent(c.Template_Content)|| IsMatchContent(c.Template_Text_Content)|| IsMatchContent(c.Variable_List));logger.Info($"{account}, allCampaigns.Count: {allCampaigns.Count}, modifyCampaigns.Count: {modifyCampaigns.Count}");foreach (var campaign in modifyCampaigns){bool isupdate = false;if (IsMatchContent(campaign.Template_Content)){campaign.Template_Content = ReplaceContent(campaign.Template_Content);isupdate = true;}if (IsMatchContent(campaign.Template_Text_Content)){campaign.Template_Text_Content = ReplaceContent(campaign.Template_Text_Content);isupdate = true;}if (IsMatchContent(campaign.Variable_List, onlyText: true)){campaign.Variable_List = ReplaceContent(campaign.Variable_List, onlyText: true);isupdate = true;}if (isupdate){amznFdbkMailCampaignTemplateService.Update(campaign, nameof(ReleaseUpdate1381));}}#endregion Campaign Template}catch (Exception e){Log($"Catch exception. account: {account}, {e.ToString()}");}}//System.Threading.Interlocked.Decrement(ref executingCount);System.Threading.Interlocked.Increment(ref completedCount);LogProgress();});}protected override string GetLoggerName(){return GetType().FullName;}}public static class ReplaceRegexIMG{public static string ReplacehtmlBody(string htmlBody){if (string.IsNullOrWhiteSpace(htmlBody)){return htmlBody;}var reg = new System.Text.RegularExpressions.Regex("(\\<img.*?style=['\"])([^\\>]+\\>)", System.Text.RegularExpressions.RegexOptions.IgnoreCase);return reg.Replace(htmlBody, "$1max-width: 80% !important;$2");}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx对websocket的支持及uliweb chatroom的测试

2019独角兽企业重金招聘Python工程师标准>>> 在尝试在uliweb中使用gevent开发聊天室时&#xff0c;已经在网上搜到nginx是支持websocket的代理的&#xff0c;不过应该不支持集群模式。不过当时没有试过&#xff0c;今天试了一下&#xff0c;在普通的反向代理是没有问…

为什么祖国没有农历生日? | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅假期计划路线所以为什么没有农历生日所以这个到底是什么字&#xff1f;身体不适&#xff0c;去了趟医院那医生怎么说&#xff1f;......你还敢说养我吗&#xff1f;&#xff08;图源网络&#xff0c;侵权删&#xff09;

ios中amplify配置configure_Nginx源码编译安装及配置文件初步学习

通过源码编译安装。nginx.org #官网地址 # 安装过程 wget http://nginx.org/download/nginx-1.18.0.tar.gz -P /usr/src # tar文件用tar命令解压 tar -zxvf nginx-1.18.0.tar.gz关于wget的-P参数&#xff0c;manual中的解释是prefix&#xff0c;Set directory prefix …

RFID会议签到系统总结(二十一)――服务端的通讯

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />这一篇其实没什么可讲的&#xff0c;只提一下跟客户端不太一样的一些地方。 服务端跟客户端最大的区别是它面对的不是单单一个连接&#xff0c;而是有一些个连接。对于接收与发送…

演示: 动态NAT完成网络地址翻译

演示&#xff1a; 动态NAT完成网络地址翻译技术交流与答疑请加入群&#xff1a;1952289演示目标&#xff1a;使用动态NAT完成对私有网络的地址翻译。演示环境&#xff1a;如下图9.63所示。演示背景&#xff1a;该演示环境保持PAT演示环境的网络基础配置&#xff0c;然后使用动态…

.NET测试用例写的好不好?让变种来测试一下!

为了保证代码能够正常工作&#xff0c;我们常常编写了大量单元测试&#xff0c;并且代码覆盖率也做到了100%。但是在生产环境运行时还是会出问题&#xff01;为什么&#xff1f; 这是因为你没有进行变异测试&#xff01;变异测试变异测试就是把bug&#xff08;变种mutant&#…

你根本想象不到,学霸到底经历过什么

全世界只有3.14 % 的人关注了青少年数学之旅在微信的订阅号中&#xff0c;每人最多有12个常读公众号。可公众号这么多&#xff0c;哪些公众号值得关注呢&#xff1f;今天给大家推荐的几个公众号&#xff0c;不仅生产优质的时效性内容&#xff0c;还会提供各种多元化的内容角度&…

mysql重装远程服务未_MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)...

最近服务器很不稳定&#xff0c;于是重装了mysql 和php 服务&#xff0c;但是接着却遇到了很头疼的麻烦。远程连接mysql是总是提示&#xff1a;Lost connection to MySQL server at ‘reading initial communication packet, system error: 0很明显这是连接初始化阶段就丢失了连…

买基金如何开户

开户主要有两种途径&#xff1a;&#xff08;1&#xff09;投资者通过深交所交易系统认购、买入或卖出上市开放式基金须使用深圳A股账户或深圳证券投资基金账户&#xff08;以下简称“深圳证券账户”&#xff09;。投资者可通过中国结算公司深圳分公司的开户代理机构&#xff0…

OpenStack开启亚洲之旅

11月5-8日&#xff0c;OpenStack峰会在中国香港亚洲国际博览馆举行。这是OpenStack峰会首次在北美地区之外举行&#xff0c;吸引了约3000名全球各地的企业、用户和开发者。中国已经是除美国以外OpenStack软件下载量和对社区贡献代码量第二大的地区。OpenStack峰会此次落户香港也…

历史上最怪异的23种飞行器,设计者脑子里都想什么了

全世界只有3.14 % 的人关注了青少年数学之旅历史的长河中有无数稀奇古怪&#xff08;呆萌&#xff09;的发明被无情淘汰&#xff0c;而飞行器的发明可谓人类探索道路上尤为浓烈的一笔&#xff0c;过去的110多年里&#xff0c;空中就曾出现以下23中古怪的飞行器。下面这张图比较…

NET问答: 如何让 HttpClient 支持 Http 2.0 协议?

咨询区 Justin Lessard&#xff1a;我的一个项目需要支持 Http 2.0 进行数据的收发&#xff0c;目前用的项目版本是 .NET Core 2.2&#xff0c;我选型了 HttpClient&#xff0c;但是我发现一个问题&#xff0c;在生产环境中的程序返回的 response 版本一直都是 Http 1.1&#x…

最近读的书与做的事

做的事情无非是Thesis当头&#xff0c;其他跟上。Axss的工作室站点&#xff0c;还有就是IAESTE项目的部分页面。读的书&#xff1a;《深入探索C/C》&#xff1a;搞清楚以前很多一知半解的概念《Game Programming Gem 3》&#xff1a;对我而言仍是太深了点&#xff0c;不过当作了…

从mysql读取图片_如何从sql数据库内读取图片

privatevoidSHOW(){MemoryStreamstreamnewMemoryStream();byte[]buffBytenull;stringsqlstr"selectRefFinImagefromRefTablewhereRefId5";//我要规定死读入第五张图片SqlConnectio...private void SHOW(){MemoryStream stream new MemoryStream();byte[] buffByte …

邮件发送类,支持Gmail

邮件发送类,支持Gmail&#xff0c;使用简单方便 usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Net;usingSystem.Net.Mail;namespaceLZ2007.Function...{ /**//// <summary> /// 邮件发送类 /// <CreateDate>2007/07/02<…

和爸爸的聊天永远是个谜。。 | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅【1】【2】【3】【4】【5】【6】【7】【8】【9】【10】【11】【12】【13】【14】【15】【16】【17】【18】【19】【20】【21】【22】【23】【24】&#xff08;图源网络&#xff0c;侵权删&#xff09;

FZU Problem 2030 括号问题

Problem Description 给出一个字符串&#xff0c;其中包括3种字符: ‘(‘, ‘)’, ‘?’.其中?表示这个字符可以是’(‘也可以是’)’. 现在给出字符串S,你可以在’?’处填写’(‘ 或者 ‘)’&#xff0c;当然随意填写得到的序列可能是括号不匹配的。例如”(?”&#xff0c…

python实现人脸识别_python人脸识别代码实现丨内附代码

Python在人脸识别方面功能很强大&#xff0c;程序语言简单高效&#xff0c;下面小编来编程实现一下如何实现人脸识别。如有错点&#xff0c;还望斧正识别图片中的人脸位置#人脸识别分类器路径tool_url rC:\Users\86188\AppData\Local\Programs\Python\Python36-32\Lib\site-pa…

dotnet 通过引用 msbuild 程序集实现自己定制编译器

本来我想说的是基于引用 msbuild 程序集来自己做一个编译器&#xff0c;但是想想好像本文做的&#xff0c;和造编译器没啥关系&#xff0c;咱自己调用 msbuild 的 API 而已。本文来告诉大家如何引用 msbuild 程序集&#xff0c;如何在自己的应用程序里面嵌入 msbuild 的构建代码…

通过修改注册表设定浏览器的却省值

安装NetScape后&#xff0c;点击*.htm文件&#xff0c;却是用NetScape打开的&#xff0c;有时候感觉不爽&#xff0c;怎样才能将浏览器的却省打开设定为IE呢&#xff1f;通过修改注册表的方法可以解决&#xff1a;保存如下内容为IEChn.reg&#xff0c;运行即可。REGEDIT4[HKEY_…