介绍
正则表达式并不是某个语言的一部分 。正则表达式是用于处理字符串的强大工具,拥有其自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,单功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;单不被支持的语法通常是不常用的部分。
正则表达式的字符和语法
贪婪和非贪婪
正则表达式通常用于在文本中查找匹配的字符串。Python中默认是贪婪的(在少数语言中可能默认是非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。
反斜杠
正则表达式里使用"“作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的”",那么将需要4个反斜杠"\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
Python里的原生字符串很好诶解决了这个问题,这个例子中的正则表达式可以使用r"\“表示。同样,匹配一个数字的”\d"可以写成r"\d"。有了原生字符串,就可以不用担心漏写反斜杠了,表达式也更加直观。
re模块常用函数
Match
使用指定正则去字符串中寻找可以匹配的字符串,返回匹配的第一个字符串,并且不再继续
注意
mach函数是从字符串开始处开始查找的,如果开始处不匹配,则不再继续寻找,返回值为一个 SER_Match对象,找不到时则返回None
escape
转义。如果你需要操作的文本中含有正则的元字符,你在写正则的时候需要将元字符加上反斜杠去匹配自身,而当这样的字符很多时,写出来的正则表达式就看起来很乱,而且写起来也很麻烦。
str = ".+\d111"
ret = re.escape(".+\d111")
print(ret)
# \.\+\\d111
findall
findall函数在待操作的字符串中寻找所有匹配正则表达式的字符串,返回一个列表,如果没有匹配到任何字符串,返回一个空列表。
import re
ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
print(ret)
# ['9999', '7890', '12345']
search
search函数类似于match,不同之处在于不限制正则表达式开始匹配的位置
import re
ret = re.search(r"\d+", "阅读次数为 9999")
ret.group()
# '9999'
sub
按照规则去查询字符串,并且将匹配到的数据进行替换
import re
ret = re.sub(r"\d+", '998', "python = 997")
print(ret)
# python = 998
split
根据匹配进行切割字符串,并返回一个列表
import re
ret = re.split(r":| ","info:xiaoZhang 33 shandong")
print(ret)
# ['info', 'xiaoZhang', '33', 'shandong']