一、正则表达式概念
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
二、常用的re方法
#导入正则模块包 import re #re.findall方法:在字符串中找到正则表达式所匹配的所有字符串,并返回一个列表,如果没有匹配的,则返回空列表 #从compile()函数的定义中,可以看出返回的是一个匹配对象,它单独使用就没有任何意义,需要和findall(), search(), match()搭配使用。 a = '123abc445bcdi8dh8j' #一下两行代码也可以进行匹配,使用compile函数生成一个匹配规则对象。 # yan = re.compile('[a-zA-z]+') # b = yan.findall(a) b= re.findall(r'[a-zA-z]+',a) print(b)
['abc', 'bcdi', 'dh', 'j']
#re.serch方法:扫面整个字符串,匹配成功就返回一个对象,就不再往下找了。 import re a = '123abc445bcdi8dh8j' b = re.search('bc',a) print(b) #通过group()查看匹配的内容,span()查看匹配的内容的下标 print(b.group()) print(b.span())
<re.Match object; span=(0, 3), match='123'> None
#re.match方法:只从开始位置的字符串进行匹配,匹配成功就返回一个匹配对象;如果不是起始字符串匹配成功,就返回为空 import re a = '123abc445bcdi8dh8j' b = re.match('123',a) print(b) c = re.match('8dh',a) print(c)
<re.Match object; span=(4, 6), match='bc'> bc (4, 6)
#re.split分割:通过定义的分割规则进行字符串分割 #d+:匹配数字,0—9;W+:匹配非单词向量 import re str1 = 'one1two2tree3four4fine' str2 = 'one,two,tree,four,fine' str3 = re.split('d+',str1) str4 = re.split('W+',str2) print(str3) print(str4)
['one', 'two', 'tree', 'four', 'fine'] ['one', 'two', 'tree', 'four', 'fine']
#re.sub()替换字符串中每一个匹配的自串后返回新的字符串 str1 = 'one1two2tree3four4fine' print(re.sub('d','-',str1))
one-two-tree-four-fine
#re.finditer:引用分组 import re str = 'hello 123,word 321' pattern = re.compile('w+ d+') #print(pattern.finditer(str)) 返回一个对象 for i in pattern.finditer(str): #group(0)返回一个完整的字符串内容 print(i.group(0)) pattern1 = re.compile('(w+) (d+)') for i in pattern1.finditer(str): print(i.group(0)) print(i.group(1)) print(i.group(2))
hello 123 word 321 hello 123 hello 123 word 321 word 321
#匹配中文字符 import re str = '帅哥 123,美女 321' pattern = re.compile('[u4e00-u9fa5]+') print(pattern.findall(str))
['帅哥', '美女']