正则表达式11个元字符 及 方法讲解
import re
s = 'hello world'
a = s.find('h')
print(a)
p = s.replace('l', 'xx')
print(p)
b = s.split('w')
print(b)
##############################
#元字符 1:‘ . ’通配符 代指所有的字符,除了换行符 一个通配符只能代指一个字符
a = re.findall('w..l', 'hello world')
print(a)# ['worl']
print(re.findall('w.l', 'hello w\nld')) #[]
#re.findall(pattern,string,flag)flag可以更改‘.’所代指的规则,即‘\n’也可以代指,但一般不乱改
##############################
#元字符 2:‘^’尖角符 只在string头部 开始匹配
print(re.findall('^h...o', 'habcodefg')) #['habco']
#元字符 3:‘$’ 只在string尾部 开始匹配
print(re.findall('h..l$', 'abcddhivl')) #['hivl']
#元字符 4:‘*’ 重复匹配[0,无穷]次
print(re.findall('ba*', 'cfffbaaaaaa'))#['baaaaaa']
print(re.findall('ba*', 'cfffb'))#['b']
#元字符 5:‘+’ 重复匹配[1,无穷]次
print(re.findall('ba+', 'hhhha')) #[]
print(re.findall('ba+', 'hhhhbaaaaa')) #['baaaaa']
#元字符6:‘?’ 重复匹配[0,1]次
print(re.findall('a?b', 'bbbbbbbk'))#['b', 'b', 'b', 'b', 'b', 'b', 'b']
print(re.findall('a?b', 'abbbbbbbk'))#['ab', 'b', 'b', 'b', 'b', 'b', 'b']
print(re.findall('a?b', 'aaababaaabb'))#['ab', 'ab', 'ab', 'b'] #不会出现[aaab]等多个a 的情况
#元字符7:‘{n}’大括号。重复匹配人n次 或{n,m}n到m次
print(re.findall('a{3}b', 'aaaaaaab'))#['aaab']
print(re.findall('a{3}b', 'ab'))#[]
print(re.findall('a{1,3}b', 'aab'))#['aab']
print(re.findall('a{1,3}b', 'aaaaaaaaab'))#['aaab'] 这是贪婪匹配 匹配最多的次数
##结论1:*={0,正无穷}
##结论2:+={1,正无穷}
##结论3:?={0,1}
#元字符8:'[]'字符集 取消元字符的特殊功能(\ ^ - )例外
print(re.findall('a[b,c]d', 'acd'))#['acd']二选一 [com,cn]用来筛选网址
print(re.findall('[a-z]', 'ad115fdfsfsz')) #['a', 'd', 'f', 'd', 'f', 's', 'f', 's', 'z'] '-'的功能还在 去a到z之间的值
print(re.findall('[w.*]', 'wsd.*')) #['w', '.', '*'] * . 的功能都取消了
print(re.findall('[^w.*]', 'aawsd.*')) #['a', 'a', 's', 'd'] 取反 除了(w.*)都去出来了
print(re.findall('[^4,5]', '12344135')) #没有4或5 ['1', '2', '3', '1', '3']
#元字符 9:\ 反斜杠 1 反斜杠后跟元字符取出特殊功能 如 \* 取消重复匹配 的功能
# 2 反斜杠后跟普通字符实现特殊功能 如\n 换行
#这里我举一些普通字符的特殊含义
# \d=[0,9]
# \D=[^0,9]
# \s=[\t\n\r\f\v] 匹配任何空的字符
# \S=[^\t\n\r\f\v]匹配任何非空的字符
# \w=[a-zA-Z0-9]=[A-Z,a-z,0-9]匹配任何数字字母字符
# \W=[^a-zA-Z0-9] 匹配任何非数字 非字母 字符
# \b 匹配一个特殊字符边界
print(re.findall(r'i\b', 'i am a girl')) #['i']取到第一个 i 这里的‘r’是表示让字符串里的内容代表他本来代表的功能或内容
################
print(re.search('sd', 'sdffaafasd').group()) #sd search只取匹配到的第一个符合的字符或字符串
#元字符 10 :() 括号 11:| 竖线
print(re.search('(ad)+', 'adadadsadaf').group()) #adadad 取括号里面的整体
print(re.search('(ad)|3', 'ad3').group()) #ad
print(re.search('(ad)|3', '3ad').group()) #3 取ad 或3 竖线表示或
ret = re.search('(?P<id>\d{3})/(?P<name>\w{3})', 'asdad321/kkk')
print(ret.group()) #321/kkk
print(ret.group('id')) #321
print(ret.group('name')) #kkk
正则表达式方法
fidall() :返回所有结果
search():返回匹配到的第一个对象(object),对象可以调用.group()返回结果
match(): 只在字符串开始 开始匹配,也只返回一个对象 对象可以调用.group()返回结果
print(re.match('ad', 'asssad')) #None
print(re.match('ad', 'adsdfad').group()) #ad
split(): 分割
print(re.split('s', 'aasdfghjkl')) #['aa', 'dfghjkl']
print(re.split('[s,j]', 'aasdfghjkl')) #['aa', 'dfgh', 'kl']
print(re.split('[s,j]', 'saasdfghjkl')) #['', 'aa', 'dfgh', 'kl']其中的空是有第一个‘s'前的空导致的
sub(): 替换
print(re.sub('d..g', 's.......d', 'liudongemidengmei')) #lius.......demis.......dmei
compile() 将正则表达式规则封装成一个对象 便于日后引用
obj =re.compile('\.com')
print(obj.search('zhengze.combiaodashi').group()) #.com
print(obj.search('laozid.comdengmmei').group()) #.com
补充几组图片: