#-*-coding:utf-8-*-
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。
re.match 尝试从字符串的起始位置匹配一个模式
group(num) 或 groups() 匹配对象函数来获取匹配表达式。
import re
print(re.match('www',"www.baidu.com").span()) # 在起始位置匹配
line = 'cat are smarter than dogs'
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# 匹配括号内的表达式,也表示一个组
# re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,
matchobj = re.match(r'(.*) are (.*?) .*',line,re.M|re.I)
if matchobj:
print(matchobj.group())
print(matchobj.group(2))
else:
print("no match")
#re.search 扫描整个字符串并返回第一个成功的匹配。
#标志位,用于控制正则表达式的匹配方式
print(re.search('bai','wwww.baidu.com').span(),re.M|re.I)# (5,8)
print(re.search('du','wwww.baidu.com')) #<_sre.SRE_Match object; span=(8, 10), match='du'>
import re
line = 'cat are smarter than dogs'
matchobj = re.search(r'dog',line,re.M|re.I)
print(matchobj.group(),matchobj.span()) #group() 返回匹配的字符串,span()返回位置
#检索和替换
re.sub用于替换字符串中的匹配项。
re.sub(pattern, repl, string, count=0, flags=0)
pattern: 正则中的模式字符串。
repl: 替换的字符串,也可为一个函数。
string: 要被查找替换的原始字符串。
count: 模式匹配后替换的最大次数,默认
0
表示替换所有的匹配。
flags: 编译时用的匹配模式,数字形式。
import re
phone = "2004-959-559 # 这是一个电话号码"
# 删除注释 phone num 2004-959-559
num = re.sub(r'#.*$','',phone)
print("phone num",num)
# 移除非数字的内容 2004959559
num = re.sub(r'\D','',phone)
print(num)
#repl 参数是一个函数
# 将匹配的数字乘于 2
def double(matched):
value = int(matched.group('value'))
return str(value*2)
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)',double,s))
#compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
#re.complie(pattern,flag)
pattern: 一个字符串形式的正则表达式
flags
可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为 ' . ' 并且包括换行符在内的任意字符(' . ' 不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和
' # ' 后面的注释
import re
parttern = re.compile(r'\d+')
m = parttern.match('onetwo12')
print(m)
m=parttern.match('onetwo12',6)
print(m) # m is <_sre.SRE_Match object; span=(6, 8), match='12'>
print(m.span(0))
#匹配以字母开头的单词
parttern = re.compile(r'([a-z]+) ([a-z]+)',re.I)
m = parttern.match('Hello world wide wed')
print(m.span())
#findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表
parttern = re.compile(r'\d+')
result1= parttern.findall('runoob 123 google 246')
result2 = parttern.findall(r'run88oob234google456',6,10)
#start stop
print(result1)
print(result2)
#['123', '246'] ['23']
# re.finditer 在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
it = re.finditer(r'\d+','12ab34cd56ef')
print(type(it))
for match in it:
print(match) #<_sre.SRE_Match object; span=(0, 2), match='12'>
print(match.group())
#re.split 方法按照能够匹配的子串将字符串分割后返回列表
#加括号逗号也被单独分割出来 不加括号只分割单词
m=re.split('\W+','runoob, bookmark, hello')
m=re.split('(\W+)',' runoob, bookmark, hello',2)#分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
# 匹配括号内的表达式,也表示一个组
print(m)