针对字符串提炼出需要的部分;
正则表达式(或RE)是一种小型的,高度专业化的编程语言,(在python中)它内嵌在python中,并通过re模块实现。正则表达式模式被译为一系列的字节码,然后由用C编写的匹配引擎执行;
一、元字符
使用 | 说明 | 案例 | 说明 | . | 除换行符以外的任意一个符号;re.s模式也可以使.匹配包括换行在内的所有字符 | | | ^ | 匹配字符串的开头;在字符集[]中使用表示取反的意思 | | | $ | 匹配字符串的结尾 | | | * | 匹配0个或多个表达式,默认贪婪模式 | ret = re.findall('hello a*','hello aaaab')
print(ret) | 匹配‘hello a’,a可以0个或多个;贪婪模式取最长的a; 结果为: | + | 匹配1个或多个表达式。默认贪婪模式 | | | ? | 匹配0个或1个由前面的正则表达式,默认非贪婪模式 | ret = re.findall('hello a?','hello aaaaab')
print(ret) | 匹配0个或1个,大于1个时,结果输出1个; 结果为['hello a'] | {n,m} | 匹配n到m次由前面的正则表达式定义的片段,贪婪模式;当花括号中只有一个值{n}时,表示匹配n次 | | | [] | 字符集,多个字符选其一,[^...]取反;[1-9]表示匹配从1到9的范围 | | | | | 匹配做正则表达式或右边正则表达式 | | | () | 匹配括号内的表达式,也表示一个组;仅输出括号中的字符 | | | \ | 转义符 | | |
使用案例?
ret = re.findall('hello .{5}', 'hello python,hello world,hello re,hello sxm')
print(ret)
# ['hello pytho', 'hello world', 'hello re,he']
ret = re.findall('hello .{2,5}', 'hello python,hello world,hello re')
print(ret)
# ['hello pytho', 'hello world', 'hello re']
ret = re.findall('hello .{5},', 'hello python,hello world,hello re')
print(ret)
# ['hello world,']
ret = re.findall('hello .*,', 'hello python,hello world,hello re,hello sxms')
print(ret)
# ['hello python,hello world,hello re,']
ret = re.findall('hello .*?,', 'hello python,hello world,hello re,hello sxms')
print(ret)
# 使用最广,?在此处表示去除*的贪婪匹配;结果为['hello python,', 'hello world,', 'hello re,']
ret = re.findall('hello (.*?),', 'hello python,hello world,hello re,hello sxms')
print(ret)
# 结果为['python', 'world', 're']
ret = re.findall('[1-9]', 'ab1si3d89j0')
print(ret)
# ['1', '3', '8', '9']
ret = re.findall('[1-9]+', 'ab1si3d89j0')
print(ret)
#匹配连续的字符集,结果为['1', '3', '89']
#取以com或cn结尾的域名;?:在此处表示取消()的优先提炼权;结果为['www.baidu.com', 'www.jd.cn']
ret = re.findall('www\.[a-zA-Z]+\.(?:com|cn)', 'www.baidu.com,www.python.org,www.jd.cn')
print(ret)
?
使用 | 说明 | \d | 匹配任何十进制数,相当于[0-9] | \D | 匹配任何非数字字符,相当于[^0-9] | \s | 匹配任何空白字符,相当于[ \t\n\r\f\v] | \S | 匹配任何非空白字符,相当于[^ \t\n\r\f\v] | \w | 匹配任何字母数字字符,相当于[a-zA-Z0-9] | \W | 匹配任何非字母数字字符,相当于[^a-zA-Z0-9] | \b | 匹配一个特殊字符边界,比如空格 ,&,#等 |
二、正则方法
使用 | 说明 | re.search(re,str) | 只能匹配第一个符合匹配规则的对象 | re.match(re,str) | 以re匹配规则匹配字符串为开头的内容,相当于在re.search()的基础上增加了^的功能 | re.compile(re) | 编译匹配规则 | re.split() | | re.sub() | 正则替换 |
import re
ret = re.search('\d+', 'abc12dje')
print(ret) #匹配后的第一项的对象
print(ret.group()) #匹配后的第一项的字符串
# ?P<name>为给组起名,组名为name
ret = re.search('www\.(?P<name>[a-zA-Z]+)\.(com|cn)', 'www.baidu.com,www.python.org,www.jd.cn')
print(ret)
print(ret.group())
print(ret.group(1)) #取()组的组引号为1的字符串
print(ret.group(2))
print(ret.group('name')) #取组名为name的字符串
ret = re.match('\d+', '67dke12i=24nk')
print(ret)
print(ret.group())
comp = re.compile('\d+')
ret = comp.search('224425fv')
print(ret.group())
# split分割
ret = re.split('\d+', 'alvin34zhangsan45lisi12')
print(ret)
#结果为:['alvin', 'zhangsan', 'lisi', '']
#sub替换
ret = re.sub(' .*?,', ' sxm,', 'hello python,hello world,hello re,')
print(ret)
ret = re.sub('(hello )(.*?)(,)', '\\1sxm\\3,', 'hello python,hello world,hello re, JS,')
print(ret)
|