正则表达式 Re库
Re库是Python的标准库
import re
表示类型
raw string类型(原生字符串类型)
r'text' 例如:
r'[1-9]\d{5}'
r'\d{3}-\d{8}|\d{4}-\d{7}' #国内电话号码
raw string 是不包含转义符的字符串
string类型,更繁琐,需要转义符
当正则表达式包含转义符时,使用raw string
Re库主要功能函数
- re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
- re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
- re.findall() 搜索字符串,已列表类型返回全不能匹配的字符串
- re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
- re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
- re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
re.search(patter,string,flags=0)
- pattern:郑子表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:控制标记
- re.I re.IGNORECASE:忽略正则表达式的大小写
- re.M re.MULTILINE:正则表达式中的……操作符能够将给定字符串的每行当做匹配开始
- re.S re.DOTALL:正则表达式中的.操作符能够匹配所有的字符,默认匹配除换行外的所有字符
例:
import re
match = re.search(r'[1-9]\d(5)','BIT 100081')
if match:
print(match.group(0))
re.match(pattern,string,flags=0)
从一个字符串的开始位置起匹配正则表达式返回match对象。
- pattern:正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
import re
match = re.match(r'[1-9]\d{5}','BIT 100081')
if match:
match.group(0)
match.group(0) #报错,NoneType
match = re.match(r'[1-9]\d{5}','100081 BIT')
if match:
match.group(0) # '100081'
re.findall(pattern,string.flags=0)
- pattern:正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
import re
ls = re.findall(r'[-19]\d{5}','BIT100081 TSU100084')
ls # ['100081','100084']
re.split(pattern,string,maxsplit=0,flags=0)
- pattern:正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- maxsplit:最大分割数,剩余部分作为最后一个元素
- flags:正则表达式使用时的控制标记
import re
re.split(r'[1-9]\d{5}','BIT100081 TSU100084')
# ['BIT',' TSU',' ']
re.split(r'[1-9]\d{5}','BIT100081 TSU100084',maxsplit = 1)
# ['BIT', ' TSU100084']
re.finditer(pattern,string,flags=0)
- pattern:正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
import re
for m in re.finditer(r'[1-9]\d{5}','BIT100081','TSU100084'):
if m:
print(m.group(0))
re.sub(pattern,repl,string,count=0,flags=0)
- pattern:正则表达式的字符串或原生字符串表示
- repl:替换匹配字符串的字符串
- string:待匹配字符串
- count:匹配最大替换次数
- flags:正则表达式使用时的控制标记
import re
re.sub(r'[1-9]\d{5}',':zipcode','BIT100081 TSU100084')
Re库的另一种等价用法
rst = re.search(r'[1-9]\d{5}','BIT 100081')
函数式用法:一次性操作
等价于:
面向对象用法:编译后的多次操作
pat = re.compile(r'[1-9]\d{5}')
rst = pat.search('BIT 100081')
regex = re.compile(patter,flags=0)
将正则表达式的字符串形式编译成正则表达式对象
- pattern:正则表达式的字符串或原生字符串表示
- flags:正则表达式使用时的控制标记
regex = re.compile(r'[1-9]\d{5}')
- regex.search()
- regex.match()
- regex.findall()
- regex.split()
- regex.finditer()
regex.sub()