当前位置: 首页 > 后端技术 > Python

12个例子教你快速入门正则表达式

时间:2023-03-25 20:37:13 Python

正则表达式:https://mp.weixin.qq.com/s/kS...这里只是简单介绍正则表达式,其他的不涉及.正则表达式的基本介绍,以及一些基本的使用方法和案例。本文适合初学者学习正则表达式。不讲太多理论,更喜欢在实战中实践!先学习如何使用,再在使用过程中摸索其中的逻辑。正则表达式是什么?正则表达式(RegularExpression)是用来描述一组字符串特征的模式,用于匹配特定的字符串。使用特殊字符+普通字符来描述模式,从而达到文本匹配的目的。说白了,正则表达式就是一个主要用来提取和替换字符串的工具。测试工具在编写正则表达式的过程中,我们可能会测试表达式的正确性。这时候就需要用到测试工具了。我这里使用RegexTester.exe,请自行下载!RegexTester基本上有2种模式,一种是搜索,一种是替换,选择查找并根据需要填写正则表达式和要匹配的字符串,点击运行显示结果这里是0,1,2,3,4....0:表示匹配整个正则表达式的结果,1:表示匹配第一个括号的结果2:表示匹配第二个括号的结果,以此类推。替换和查找类似,多了一个替换项,其实就是先查找,根据替换项的规则替换找到的字符串。$1:表示这是找到的第一个括号匹配的结果$2:表示这里是找到的第二个括号匹配的结果,以此类推。例子的详细解释直接上案例。案例中的所有正则表达式都在图中。没给直接复制粘贴,自己复现,我印象更深了。复现过程中,如果对正则语法、元字符、特殊字符等不理解,可以查看附表或自行百度。例1:现在有一个要匹配的字符串:构造正则表达式的方法与创建数学表达式的方法相同。也就是说,可以使用各种元字符和运算符组合小表达式以创建更大的表达式。需求:匹配表达式3个汉字这里可以看到我们可以直接把表达式当成正则表达式,我们匹配了4个地方。示例2:需求:匹配所有的正则表达式。例子3:需求:我们要匹配所有的正则表达式和数据表达式,方法一我们知道。可以用来匹配除换行符外的任意字符,因为表达式的前两个字符变了,我们用点代替,可以看到匹配到了4个结果,但是其中2个不是我们想要的,优化一下so我们可以得到我们想要的结果。这里的[^]表示匹配除.以外的任意字符。方法二上面的方法,在目前的情况下,可以匹配到精确的字符串,但是如果换一下,可能会匹配到一些我们不需要的字符串。让我们在这里更精确。这里的正则表达式的意思是:括号的意思是:一组竖线|表示或表示匹配满足前两个字符为正则或数学,后三个字符为表达式。例4:sourcetext:{url:"./202108/t20210810_1259734.html",title:'2021年7月宜城区卫生局卫生监督行政处罚案',time:"2021-08-05",source:'',}{url:"./202107/t20210721_1249763.html",title:'易市市场监管局关于枣庄越强网络科技有限公司等240家企业的决定',time:"2021-07-22"}{url:"./202107/t20210721_1291713.html",title:'行政处罚...',time:"2021-07-22",source:'',}需求:提取里面所有的url。让我们看看我们想要的url有什么特征。第一个是前面的url:标识,第二个是包含在2个引号之间所以我们可以这样写\s*:表示匹配0到更多的任意空白字符[^"]*?:表示匹配除"以外的所有字符,非贪心匹配(对于贪心匹配和非贪心匹配不懂的可以百度下载)例5:源文:{url:"./202108/t20210810_1259734.html",title:'宜城区卫生局2021年7月卫生监督行政处罚案',time:"2021-08-05",source:'',}{url:"./202107/t20210721_1249763.html",title:'宜城区市场监管局关于枣庄越强网络科技有限公司等240家企业的批复',time:"2021-07-22"}{url:"./202107/t20210721_1291713.html",title:'AdministrativePenalty...',time:"2021-07-22",source:'',}需求:提取所有与例4相似的标题例6:源文本:{url:"./202108/t20210810_1259734.html",title:'宜城区卫生局2021年7月卫生监督行政处罚案',time:"2021-08-05",source:'',}{url:"./202107/t20210721_1249763.html",title:'宜城区市场监管局关于枣庄越强网络科技有限公司等240家企业的批复',time:"2021-07-22"}{url:"./202107/t20210721_1291713.html",title:'行政处罚...',time:"2021-07-22",source:'',}需求:提取前2个字符为yicheng的title例7:sourcetext:{url:"./202108/t20210810_1259734.html",title:'2021年7月健康SUP宜城区卫生局复审行政处罚案',time:"2021-08-05",source:'',}{url:"./202107/t20210721_1249763.html",title:'宜城区市场监管局复审枣庄越强网络科技有限公司等240家企业,时间:“2021-07-22”}{url:“./202107/t20210721_1291713.html”,标题:'行政处罚...',时间:"2021-07-22",source:'',}需求:提取易城标题对应的URL,提取前两个字符例8:sourcetext:{url:"./202108/t20210810_1259734.html",标题:'宜城区卫生局2021年7月卫生监督行政处罚案',时间:'2021-08-05',来源:'',}{url:"./202107/t20210721_1249763.html",title:'宜城区市场监管局对枣庄越强网络科技有限公司等240家企业开展调查',time:"2021-07-22"}{url:"./202107/t20210721_1291713.html",title:'行政处罚...',time:"2021-07-22",source:'',}需求:提取大括号中的字符串一般用于提取行例9:sourcetext:{url:"./202108/t20210810_1259734.html",title:'2021年7月宜城区卫生局卫生监督行政处罚案',time:"2021-08-05",source:'',}{url:"./202107/t20210721_1249763.html",title:'宜城区市场监管局对枣庄越强网络科技有限公司等240家企业开展调查',time:"2021-07-22"}{url:"./202107/t20210721_1291713.html",title:'行政处罚...',time:"2021-07-22",source:'',}要求:部分标题包含...,但我们不需要使用正则表达式此时要更换这里。要用\转义,因为在正则表达式中,默认匹配除换行符以外的任意字符。我们想用empty替换...,所以对于替换,我们留空示例10:Sourcetext:{'USCC':'92340503MA2PMQ0T13','ID':'2cc5dea5-700a-4724-92f5-b81cd97d0cb5','CF_GXRQ':'2021-08-05','NAME':'马鞍山万丰超市'}要求:将USCC补充成一个完整的url完整的url如下:http://xy.mas.gov.cn/queryDou...我们可以发现下面的url中USCC=的值就是源文中USCC的值,但是现在我们只有源文,需要自己拼成一个url。如何使用正则表达式来实现呢?Step1:我们首先在源文本中提到了USCC的值Step2:写替换项,我们提到了USCC的值,并用$1来替换,因为我们要在value的前面加上url前缀,http://xy.mas.gov.cn/queryDoublePublicInfo?USCC=$1,其他字符不变例11:源文:{'USCC':'92340503MA2PMQ0T13','ID':'2cc5dea5-700a-4724-92f5-b81cd97d0cb5','CF_GXRQ':'2021-08-05','NAME':'马鞍山万丰超市'}需求:基于例10,直接获取url。我们可以先执行例11的步骤,然后直接提供USCC的值就可以了。我不会详细介绍这个。很简单,但是现在想用正则替换直接获取正确的url,因为正则替换就是把你查到的字符串替换掉。如果未提及,则不会更换,因为我们最后只留下url,所以如果我们提到所有的源文本,我们将替换它们。','CF_GXRQ':'2021-08-05','NAME':'马鞍山万丰超市'}需求:在例11的基础上稍微复杂一点,也是直接获取url。完整的url是这个:http://xy.mas.gov.cn/queryDou...可以看到这里有2个参数,其实逻辑和上面一样,就是多了一步,并且也提到了id的值,进行正则替换注意“|”的区别和“[]”:垂直线|是or关系,垂直线两边任意匹配为真。一、建立([]是一组字符)正则规则中的替换是将匹配到的数据替换为其他数据。如果没有数据匹配,它将保持不变。$1、${1}:表示从0开始计数,第一个括号匹配的内容,\s\S和.的区别。\s\S:匹配所有字符。:匹配除换行符以外的所有字符附录:正则匹配百科^匹配字符串的开头$匹配字符串的结尾end。匹配除换行符以外的任何字符,当指定re.DOTALL标志时,它可以匹配包括换行符在内的任何字符。[...]用于表示一组字符,分别列出:[amk]匹配'a'、'm'或'k'1个不在[]中的字符:2个匹配除a、b、c字符。re*匹配零个或多个表达式。re+匹配1个或多个表达式。关于?匹配前面正则表达式定义的0个或1个片段,非贪婪模式re{n}恰好匹配前面n个表达式。例如,o{2}不会匹配“Bob”中的“o”,但会匹配“food”中的两个o。re{n,}匹配前面表达式的n次出现。例如,o{2,}不会匹配“Bob”中的“o”,但会匹配“foooood”中的所有o。“o{1,}”等同于“o+”。“o{0,}”等同于“o*”。re{n,m}匹配前面正则表达式定义的n到m倍的段,贪心a|b匹配a或b(re)匹配括号中的表达式,也表示一组(?imx)正则表达式公式包含三个可选标志:i、m或x。只有括号中的区域会受到影响。(?-imx)用于关闭i、m或x可选标志的正则表达式。只有括号中的区域会受到影响。(?:re)类似于(...),但不表示一个组(?imx:re)在括号中使用i、m或x可选标志(?-imx:re)不要在括号中使用i,m,或x可选标志(?#...)注释.(?=re)正向定界符。如果包含的正则表达式(由...表示)在当前位置成功匹配则成功,否则失败。但是一旦尝试了包含的表达式,匹配引擎就根本不会前进;模式的其余部分也尝试分隔符的右侧。(?!re)前瞻否定定界符。与正定界符相反;当包含的表达式无法在字符串中的当前位置匹配时成功匹配的独立模式(?>re),省略回溯。\w匹配字母数字和下划线\W匹配非字母数字和下划线\s匹配任何空白字符,等同于[\t\n\r\f]。\S匹配任何非空白字符\d匹配任何数字,等等。Valencein[0-9].\D匹配任何非数字\A匹配字符串的开头\Z匹配字符串的结尾,如果有换行符,只匹配换行符之前的结束字符串。\z匹配字符串的结尾\G匹配最后一个匹配完成的位置。\b匹配单词边界,即单词和空格之间的位置。例如,'er\b'将匹配“never”中的“er”,但不匹配“verb”中的“er”。\B匹配非单词边界。'er\B'匹配“verb”中的“er”,但不匹配“never”中的“er”。\n、\t等。匹配换行符。匹配制表符。etc.\1...\9匹配第n组的内容。\10匹配第n组的内容,如果匹配的话。否则为引用八进制字符代码的表达式。[\u4e00-\u9fa5]更多汉字匹配教程:https://www.runoob.com/regexp/regexp-tutorial.html更多内容关注我...?abc?