正则表达式的总结
首先向大家强烈推荐一个在线检测正则表达式的链接:Online regex tester and debugger: PHP, PCRE, Python, Golang, JavaScript
+、?、*、{min,max}这四种数量匹配,单独使用时,他们就是贪婪模式(会回溯)。如果在他们后面加上一个?,就变为了懒惰模式(会回溯)。如果在他们后面加上一个+,就变为了独占模式(不会回溯)。
易错点:千万不要在正则表达式中加入空格!!!
以下是常用的正则用法:(对于复杂的正则表达式,要涉及一些贪婪模式、懒惰模式、独占模式以及回溯)
import re print(re.match("^Chen", "Chenronghua")) print(re.match("^Chen", "Chenronghua").group()) if "hen" in "Chenronghua": print("000") print(re.match("^Chen\d", "Chen321ronghua123").group()) print(re.match("^Chen\d+", "Chen321ronghua123").group()) print(re.match("^.+\d", "Chen321ronghua123").group()) # re.match是从字符串开头匹配,所以它默认是从第一个字符匹配,即^没有用;当返回None时,调用group时会报错。 print(re.match("^r.+", "Chen321ronghua")) #这个时匹配不到的 ############################################################### # re.research是从整个文本里进行搜索 # 其中^表示在整个字符串中的开头,$表示整个字符串中的结尾 # 他会尽可能的取,一直到没有符合的为止 # 转义符\的意思就是告诉解释器,你不要解释它,就把他当成一个简单的字符就行了 print(re.search("r.+a", "Chen321ronghua123").group()) print(re.search("r[a-z]+a", "Chen321ronghua123a").group()) print(re.search("r[a-zA-Z]+a", "Chen321rongHaaaaaaaua123a").group()) # #是匹配?前一个字符一次或零次 print(re.search("aaa2?", "aaa2lex")) print(re.search("a?", "lex")) print(re.search("[0-9]{3}", "aa1a2le345x").group()) print(re.search("[0-9]{1,3}", "aa1a2le345x").group()) print(re.search("abc{2}", "222abccc").group()) print(re.search("abc|ABC", "ABC22abc").group()) print(re.search("(abc){2}(\|\|\=){2}", "abcabc||=||=").group()) # s匹配空白符、\t、\r、\n print(re.search("\s+", "abc\t \r\naa")) # 一种装逼的应用 print(re.search("(?P<id>[0-9]+)(?P<uid>[a-zA-Z]+)", "acs1233adcer#").groupdict()) print(re.search("(?P<id>[0-9]+)(?P<uid>[a-zA-Z]+)", "acs1233adcer#").group('id')) print(re.search("(?P<place>[0-9]{6})(?P<birthday>[0-9]{8})", "158693199910223875").groupdict()) ############################################################# print(re.findall("abc|ABC", "ABC23abc")) # re.findall的作用是找出所有符合条件的内容 print(re.findall("[0-9]{1,3}", "aa1a2le345x")) print(re.findall("[0-9]{3}", "aa1a2le3425x")) print(re.findall("[0-9]{1,3}", "aa1a2le3425x")) ################################################################## # re.split是将字符串分割成多个,放在列表中 print(re.split("[0-9]", "ad24ghr5t622ee")) #这样会有空的元素出现,加上+就可以了 print(re.split("[0-9]+", "ad24ghr5t622ee")) ################################################################## # re.sub将匹配到的值替换成新值,它没有group函数 print(re.sub("[0-9]+", "|", "34dg4ggdrg54v")) # 如果我想要将匹配得到的前两个进行替换,得加一个参数count print(re.sub("[0-9]+", "|", "34dg4ggdrg54v", count=2))