针对字符串提炼出需要的部分;
正则表达式(或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)