Python3正则表达式使用

来源:互联网 发布:淘宝上的算命准吗 编辑:程序博客网 时间:2024/05/17 07:30

正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下。

模式描述

\w匹配字母数字及下划线\W匹配非字母数字及下划线\s匹配任意空白字符,等价于 [\t\n\r\f].\S匹配任意非空字符\d匹配任意数字,等价于 [0-9]\D匹配任意非数字\A匹配字符串开始\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串\z匹配字符串结束\G匹配最后匹配完成的位置\n匹配一个换行符\t匹配一个制表符^匹配字符串的开头$匹配字符串的末尾。.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。[...]用来表示一组字符,单独列出:[amk] 匹配 'a''m''k'[^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。*匹配0个或多个的表达式。+匹配1个或多个的表达式。?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式{n}精确匹配n个前面表达式。{n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式a|b匹配a或b( )匹配括号内的表达式,也表示一个组

.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符

import rea = 'xz123'b = re.findall('x....',a)print(b)运行结果:['xz123']

*匹配0个或多个的表达式

import rea = 'xyxy123'b = re.findall('x*',a)print(b)运行结果:['x', '', 'x', '', '', '', '', '']

?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式

import rea = 'xy123'b = re.findall('x?',b)print(b)运行结果:['x', '', '', '', '', '']

.*的使用举例

import resecrect_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'b = re.findall('xx.*xx',secrect_code)print(b)运行结果:['xxIxxfasdjifja134xxlovexx23345sdfxxyouxx']

.*?的使用举例

secrect_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'b = re.findall('xx.*?xx',secrect_code)print(b)运行结果:['xxIxx', 'xxlovexx', 'xxyouxx']

(.*?)使用括号与不使用括号的差别
( )匹配括号内的表达式,也表示一个组

import resecrect_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'd = re.findall('xx(.*?)xx',secrect_code)print(d)for each in d:    print(each)运行结果:['I', 'love', 'you']Iloveyou

re.S的作用使.的作用包括了\n

import res = '''sdfxxhelloxxfsdfxxworldxxasdf'''d = re.findall('xx(.*?)xx',s,re.S)print(d)运行结果:['hello', 'world']

$匹配字符串的末尾

import res= 'detail.html?key=TISSUE INJURY'f = re.findall('key=(.*?)',s)print(f)运行结果:['']import res= 'detail.html?key=TISSUE INJURY'f = re.findall('key=(.*?)$',s)print(f)运行结果:['TISSUE INJURY']

\d匹配任意数字,等价于 [0-9]

import res = 'asdfasf1234567fasd555fas'b = re.findall('(\d+)',s)print(b)运行结果:['1234567', '555']

\转义字符

import res = 'sda123sdaslda.s/'b = re.search('\.',s)print(b)print(b.span())print(b.group())运行结果:<_sre.SRE_Match object; span=(13, 14), match='.'>(13, 14).

a|b匹配a或b

import res = 'fishdafishc'b= re.search(r'fish(c|d)',s)print(b)运行结果:<_sre.SRE_Match object; span=(0, 5), match='fishd'>

{n}精确匹配n个前面表达式

import res ='i fishhhfish.a'b = re.search(r'fish{3}',s)print(b.group())运行结果:fishhhs  = 'i fishhhfishfishfish.a'b = re.search(r'(fish){3}',s )print(b.group())运行结果:fishfishfish

{n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式

import res = 'i fishhhfishfishfish.a'b = re.search(r'(fish){2,5}',s)print(b.group())运行结果:fishfishfish

sub的使用举例

import res = '123rrrrr123'output = re.sub('123(.*?)123','123%d123'%789,s)print(output)运行结果:123789123#把一串文本中的所有数字都去掉content = '54aK54yr5oiR54ix5L2g'content = re.sub('\d+', '', content)print(content)运行结果:aKyroiRixLg

findall与search的区别

import res2 = 'asdfxxIxx123xxlovexxdfd'f = re.search('xx(.*?)xx123xx(.*?)xx',s2).group(1)print(f)f2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2)print(f2[0][1])运行结果:I[('I', 'love')]love
原创粉丝点击