re模块(正则表达式)

1.今日内容大纲

  1. 正则表达式 re模块

2.具体内容

2.1 re模块

  • 正则表达式:

    从字符串中,根据你的描述,提取最终的结果。

    s1 = 'xx教育最好的讲师:' 通过你设置的规则,选取出张三。

    中国的名著:孙子兵法,聊斋志异,西厢记.....

    中国的四大名著:西游记,三国演义,......

    设置一个匹配规则:你的匹配规则越精准,你提取的最终的结果越准确。

  • 元字符

    单个字符匹配

    \w 匹配字母或数字,下划线,包含中文
    s1='(1baidskj_$'
    print(re.findall('\w',s1))  #['1', 'b', 'a', 'i', 'd', 's', 'k', 'j', '_']
    \W 匹配特殊字符
    print(re.findall('\W',s1))  #['(', '$']
     
    
    \s 匹配空格,制表符,换行符
    print(re.findall('\s','tabau*(\t)__\n')) #['\t', '\n']
    \S 匹配非空格,制表符,换行符
    print(re.findall('\S','barry*__(_\t),\n'))#['b', 'a', 'r', 'r', 'y', '*', '_', '_', '(', '_', ')', ',']
    \d 匹配的所有的阿拉伯数字
    print(re.findall('\d\d\d','一123456Ijjjj')) #['123', '456']
    \D 匹配所有的非阿拉伯数字
    print(re.findall('\D','一2341234567IIIIII')) #['一', 'I', 'I', 'I', 'I', 'I', 'I']
    ​
    \A ^获取满足条件的开头
    print(re.findall('\Aba','barrydnskdks')) #['ba']
    print(re.findall('^ba','barryajsa'))#['ba']#print(re.findall('^ba','barryajsa'))#['ba']
    \Z $ 获取满足规则的结尾
    print(re.findall('ba\Z','barryba'))#['ba']
    print(re.findall('ba$','barryba'))#['ba']
    #\n \t
    print(re.findall('\n','barry\n \t'))#['\n']
    print(re.findall('\t','\t barry'))#['\t']

    元字符重复匹配

     

    .任意字符, 除去\n
    print(re.findall('a.b','axb anb a\nb'))#['axb', 'anb']
    显示\n
    print(re.findall('a.b','acb anb a\nb',re.DOTALL))#['acb', 'anb', 'a\nb']
    * 由左边匹配0个或者多个字符组成的片段
    print(re.findall('a*b','ababaaab'))#['ab', 'ab', 'aaab']
    ? 匹配0个或一个由左边字符定义的片段
    print(re.findall('a?b','acb ahb abb abbb aaaaab'))#['b', 'b', 'ab', 'b', 'ab', 'b', 'b', 'ab']
    + 匹配左边1个或者多个字符组成的片段
    print(re.findall('a+b','aaab aasb '))#['aaab']
    {m,n} 范围
    print(re.findall('a{1,3}b','aaababbbbaaaab'))#['aaab', 'ab', 'aaab']
    .* 贪婪匹配
    print(re.findall('a.*b','ababbabbb aaabasb ddbd'))#['ababbabbb aaabasb ddb']
    .*? 对贪婪匹配进行一个限制,非贪婪匹配
    print(re.findall('a.*?b','adsbbbbbb'))#['adsb']
    一个中括号代表一个字符
    print(re.findall('a[abcd]b','acbadbaebaab'))
    print(re.findall('a[abcd][abcd]b','abcbaccbadddasdf'))
    print(re.findall('a[1-9]b','a2ba3ba5b'))
    print(re.findall('a[a-z]b','abcacb'))
    print(re.findall('a[-*+b]b','a-ba*ba+b'))
    #['acb', 'adb', 'aab']
    #['abcb', 'accb']
    #['a2b', 'a3b', 'a5b']
    #['acb']
    #['a-b', 'a*b', 'a+b']
    #分组 默认返回()里面的元素
    print(re.findall('(.*?)_sb','a_sns__sb'))#['a_sns_']
    | 匹配左边的或者右边
    print(re.findall('barry|sq|zn','barrysqzn'))#['barry', 'sq', 'zn']
    分组返回整个的匹配字段
    print(re.findall('compan(?:y|ies)','company some good companies'))#['company', 'companies']

常用的举例方法

findall 找到左右的满足条件的字符串返回列表 。 search 找到匹配的第一个就返回

ret=re.search('\d[5-9]','barry122345')
print(ret.group())  #45
match 匹配字符串的开头
ret=re.match('[1-9][0-9]+','1234567890098765')
print(ret.group())#1234567890098765
split 按照任意多个分隔符分割
print(re.split('[|,]','你好啊| 奥利给,大家好'))#['你好啊', ' 奥利给', '大家好']
compile() 自定义规则
obj=re.compile('\d{2}')
print(obj.findall('abcdf432'))#['43']
print(obj.findall('3456gvfd54'))#['34', '56', '54']
posted @ 2019-12-15 21:38  小辉的  阅读(347)  评论(0)    收藏  举报
/*小图标*/