【BOOK】正则表达式
正则表达式
1、 开源中国—正则表达式测试工具:https://tool.oschina.net/regex/
2、 匹配规则
3、 match()
从字符串起始位置匹配正则表达式
若从起始位置匹配不到则返回None
※目标匹配:在正则表达式中加(),就可以根据括号位置获得匹配到的部分内容
※通用匹配
. 匹配初换行符以外的所有字符
* 匹配前面字符的无限次
.* 匹配任意字符
import re content = 'Hello 123 4567 World_lalalalalalal ooo gugu' # ^Hello:以Hello开头; \s:空格; \d:数字;\w{5}:5个字符或下划线 result = re.match('^Hello\s(\d\d\d)\s\d{4}\s(\w{5})', content) print(result) #<re.Match object; span=(0, 20), match='Hello 123 4567 World'> print(result.group()) # Hello 123 4567 World,匹配结果 print(result.span()) #(0, 20),匹配的范围 ## 匹配目标 print(result.group(1)) #123,正则表达式中被括号起来的第1部分 print(result.group(2)) #World,正则表达式中被括号起来的第2部分 ## 通用匹配 # .匹配初换行符以外的所有字符 # *匹配前面字符的无限次 # .*匹配任意字符 re1 = re.match('^Hello.*gugu$', content) ##匹配到整个字符 print(re1.group())
※贪婪和非贪婪
.* 贪婪匹配,匹配尽可能多的字符
.*? 非贪婪匹配,匹配尽可能少的字符
尽可能使用非贪婪匹配,避免出现匹配缺失的情况
.*? 用在字符结尾可能匹配不到任何内容
import re content = 'Hello 1234567 World_lalalalalalal ooo gugu' result = re.match('^He.*(\d+).*gu$', content) print(result.group(1)) #7 ## 贪婪匹配初最后一个数字 7 以外,其余全部匹配到 .* 里面了 result1 = re.match('^He.*?(\d+).*gugu$', content) print(result1.group(1)) #1234567
※修饰符
※转义匹配
字符串组包含了 . * ^等特殊字符需要匹配时,在这些特殊字符前面加 \
import re content = '(百度)www.baidu.com' result = re.match('\(百度\)\w{3}\.\w{5}\..*', content) print(result.group()) ## 匹配 . () 时前面要加 \
4、 search()
匹配时扫描整个字符串,返回第一个成功匹配的结果
import re content = 'Kollo 1234 mm lasokumawali 3434 yaya' re1 = re.search('mm.*?ya', content) print(re1.group())
5、 findall()
匹配时扫描整个字符串,返回所有成功匹配的结果
返回列表类型,for in循环遍历
6、 sub()
去掉一些无关内容,简化findall()的正则表达式
import re content = 'be485a563u85ti544ful45545' result = re.sub('\d+', '', content) print(result) #beautiful ,去掉字符中的所有数字
7、 compile()
将正则表达式字符串编译成正则表达式对象,可以在后续匹配中进行复用
import re con1 = '2019-12-06 12:12' con2 = '2020-11-12 03:12' con3 = '2022-03-22 19:45' pattern = re.compile('\d{2}:\d{2}') ## 编译 正则表达式对象 #去掉时间,保留日期 res1 = re.sub(pattern, '', con1) res2 = re.sub(pattern, '', con2) res3 = re.sub(pattern, '', con3) print(res1, res2, res3) # 2019-12-06 2020-11-12 2022-03-22