re.findall
\w:匹配数字、字母、下划线
\W:匹配非数字、字母、下划线
>>> re.findall('\w','hello jim 123') ['h', 'e', 'l', 'l', 'o', 'j', 'i', 'm', '1', '2', '3'] >>> re.findall('\W','hello jim 123') [' ', ' ']
\s:匹配任意空白字符,等价于【\t\n\r\f]
\S:匹配任意非空字符
>>> re.findall('\s','hello jim 123') [' ', ' '] >>> re.findall('\S','hello jim 123') ['h', 'e', 'l', 'l', 'o', 'j', 'i', 'm', '1', '2', '3'] >>> re.findall('\s','hello jim \n 123 \t') #\n和\t是可以被匹配到的 [' ', ' ', '\n', ' ', ' ', '\t']
\d:匹配任意数字,等价于【0-9】
\D: 匹配任意非数字
>>> re.findall('\d','hello \d23*-_jim 123') ['2', '3', '1', '2', '3'] >>> re.findall('\D','hello \d23*-_jim 123') ['h', 'e', 'l', 'l', 'o', ' ', '\\', 'd', '*', '-', '_', 'j', 'i', 'm', ' ']
\A:匹配字符串开始,等同于^
\Z:匹配字符串结束,等同于$
>>> re.findall('\Ahe','hello jim 123') ['he'] >>> re.findall('\Ahe','aahello jim 123') [] >>> re.findall('^he','hello jim 123') ['he'] >>> re.findall('\Z123','aahello jim 123') [] >>> re.findall('123\Z','aahello jim 123') ['123'] >>> re.findall('123$','aahello jim 123') ['123']
重复匹配:
.:匹配任意非换行字符。
[…]:用来表示一组字符。
[^…]:不在[]中的字符。
*:匹配0个或多个的表达式。
+:匹配1个或多个的表达式。
?:匹配0个或1个的由产面正则定义的片段,非贪婪方式。
{n}:匹配n个前面的表达式。
{n,m}:匹配n到m次由前面的正则表达式定义的片段,贪婪方式。 a|b:匹配a或b。
():匹配括号内的表达式,也表示一个组。
#. >>> re.findall('a.b','a1b a,b,asacb,a*b') ['a1b', 'a,b', 'acb', 'a*b'] >>> re.findall('a.b','a\nb') [] >>> re.findall('a.b','a\nb',re.S) ['a\nb'] >>> re.findall('a.b','a\nb',re.DOTALL) ['a\nb'] #* >>> re.findall('ab*','abb,ab!,abbbb') ['abb', 'ab', 'abbbb'] >>> re.findall('ab*','a') ['a'] #+ >>> re.findall('ab+','a') [] >>> re.findall('ab+','abbbb,abdaf!') ['abbbb', 'ab'] #? >>> re.findall('ab?','abbbb,abdaf!') ['ab', 'ab', 'a'] >>> re.findall('ab?','ab') ['ab'] >>> re.findall('ab?','a') ['a'] #匹配所有包含小数在内的数字 >>> re.findall('\d+\.?\d','adsfasfd123,adsaf456.sadf,123.1sd') ['123', '456', '123.1'] #.*默认为贪婪匹配 >>> re.findall('a.*b','asdsbdafewefsdfsb') ['asdsdafewefsdfsb'] #.*?为非贪婪匹配 >>> re.findall('a.*?b','asdsbdfewefsdfsb') ['asdsb'] >>> re.findall('a.*b','asdsbdfewefsdfsb') ['asdsbdfewefsdfsb'] #{n,m} >>> re.findall('ab{2}','abbbb') ['abb'] >>> re.findall('ab{2,4}','abbbb') ['abbbb'] >>> re.findall('ab{2,4}','abb') ['abb'] >>> re.findall('ab{2,4}','abbb') ['abbb'] >>> re.findall('ab{2,4}','abbbbb') ['abbbb'] >>> re.findall('ab{1,}','abbbbb')#相当于'ab+' ['abbbbb'] >>> re.findall('ab{0,}','abbbbb')#相当于'ab*' ['abbbbb'] >>> re.findall('ab{0,}','aasfa') ['a', 'a', 'a'] #[] >>> re.findall('a[1*-]b','alb a*b a-b a1*b') ['a*b', 'a-b'] >>> re.findall('a[1*-]b','a1b a*b a-b a1*b') ['a1b', 'a*b', 'a-b'] >>> re.findall('a[1*-.]b','a1b a*b a-b a1*ba.b') ['a1b', 'a*b', 'a-b', 'a.b'] >>> re.findall('a[^1*-.]b','a1b a*b a-ba@b a1*ba.b') ['a@b'] >>> re.findall('a[0-9]b','a1b a*b a-ba@b a1*ba.b') ['a1b'] >>> re.findall('a[a-z]b','a1b a*b a-ba@b a1*bagb') ['agb'] >>> re.findall('a[a-z]b','a1b aZb a-ba@b a1*bagb') ['agb'] >>> re.findall('a[a-zA-Z]b','a1b aZb a-ba@b a1*bagb') ['aZb', 'agb'] #() >>> re.findall('(ab)+','ababab123') ['ab'] >>> re.findall('ab+','ababab123') ['ab', 'ab', 'ab'] >>> re.findall('(ab)+123','ababab123') #匹配到末尾的ab123中的ab ['ab'] >>> re.findall('(?:ab)+123','ababab123') #findall的结果不是匹配的全部内容,而是组内的内容,?:可以让结果为匹配的全部内容,不只是显示括号里的内容。 ['ababab123'] >>> re.findall('href="(.*?)"','www.baidu.com') #只显示()里的内容 ['http://www.baidu.com'] >>> re.findall('href="(?:.*?)"','www.baidu.com') #显示所有内容。 ['href="http://www.baidu.com"'] >>> re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company') ['companies', 'company']
re.search()
与findall的用法完全一样,不一样的地方在于search匹配一次就结束了,要想看结果,需要配置.group()来查看,匹配不上会返回None,.group()就只会看匹配到的第一个值。
>>> re.search('alex','alex say alax is sb') <_sre.SRE_Match object; span=(0, 4), match='alex'> >>> re.search('alex','alex say alax is sb').group() 'alex' >>> re.search('alesx','alex say alax is sb').group() Traceback (most recent call last): File "", line 1, in AttributeError: 'NoneType' object has no attribute 'group' >>> re.search('alesx','alex say alax is sb')
re.match()
用法与findall一样,但他是从头匹配,如果第一个没有匹配上,后面就匹配不上,返回的是对象,如果没有匹配上,返回None,它相当于findall加了^这个符号。
>>> re.match('alex','alex say alex is sb').group() 'alex' >>> re.match('alex','alex say alex is sb').group() 'alex' >>> re.match('alex','alex say alex is sb') <_sre.SRE_Match object; span=(0, 4), match='alex'> >>> re.match('alex',' alex say alex is sb')
re.split()
指定切割符号进行切割,返回列表。
>>> re.split(':','root:x:0:0:/root::bin/bash') ['root', 'x', '0', '0', '/root', '', 'bin/bash'] >>> re.split('a','bcadab b') ['bc', 'd', 'b b'] >>> re.split('ab','bcadab b') ['bcad', ' b'] >>> re.split('ab','abcd') ['', 'cd'] >>> # 以多个字符进行分割 >>> re.split("[\d,]","a,b1c") ['a', 'b', 'c']
re.sub()
替换字符,re.sub(old,new,string,num),num表示替换的次数。
>>> re.sub('a','A','alex say alex is sb') 'Alex sAy Alex is sb' >>> re.sub('a','A','alex say alex is sb',1) 'Alex say alex is sb' >>> re.sub('(^\w+)(.*?\s)(\w+)(.*?\s)(\w+)$',r'\5\4\3\2\1','alex is sb')#排序 'sb is alex'
re.subn()
用法和re.sub差不多,但会显示替换了几次。
>>> re.subn('a','A','abcde is aaa') ('Abcde is AAA', 4) >>> re.subn('a','A','abcde is aaa',2) ('Abcde is Aaa', 2) >>>
re.compile()
正则表达式重用,可以用到这个。
>>> obj=re.compile('^alex') >>> obj.findall('alex is sb') ['alex']
原文链接:python模块之re正则,转载请注明来源!