• python-re模块基础学习


    
    import re
    import json
    
    # 第一种方法(很普遍的写法吧)
    iphones = []
    # with open('name.txt', 'r', encoding='utf-8')as f:
    #     for i in f.readlines():
    #         name, city, height, weight, iphone = i.split()
    #         if iphone.startswith('1') and len(iphone) == 11:
    #             iphones.append(iphone)
    # print(iphones)
    
    # 第二种方法(我只用了一行代码搞定)
    f = open('name.txt', 'r', encoding='utf-8')
    str_name = f.read()
    result = re.findall("[0-9]{11}",str_name)
    f.close()
    print(result)
    

    """
    re模块中匹配的语法
    re.match 从头开始匹配 (只匹配开头的字符)
    re.search 匹配包含(全局匹配,但只匹配到一个)
    re.findall 把所有匹配到的字符放到以列表中的元素返回(全局匹配,匹配到所有的返回)
    re.split 以匹配到的字符当做列表分隔符(全局匹配,用匹配到的字符做分隔符)
    re.sub 匹配字符并替换
    re.fullmatch 全部匹配
    """

    # re.match
    a = '135adasdasdsad123'
    # print(re.match('[0-9]{3}', a))  # 定义一个匹配规则,要寻找的字符串,但只匹配开头
    
    b = '1adasdasdsad123,13'
    # re.search
    # print(re.search('[0-9]{2}',b)) # 12 定义一个匹配规则,要寻找的字符串,全局匹配但是找到一个就返回后面的不再查找匹配
    
    # re.findall
    c = '12adasdasdsad123,13'
    # print(re.findall('[0-9]{2}', c))  # ['12', '12', '13']定义一个匹配规则,要寻找的字符串,全局匹配将所有满足规则的放在一个列表中并返回
    
    d = '12adasdasdsad123,13'
    # print(re.split(',', d))  # ['12adasdasdsad123', '13']
    # print(re.split('[0-9]{2}', d))  # ['', 'adasdasdsad', '3,', '']
    # 再看下字符串的split分割
    # print(d.split(',')) # ['12adasdasdsad123', '13'] 按照精准的字符进行分割两个效果是一样的
    # print(d.split('12')) #  ['', 'adasdasdsad', '3,13'] 但是re.split可以写规则啊,字符串的split只能准确的字符
    
    #  re.sub
    e = '12adasdasdsad123,13'
    # print(re.sub('12','33',e))#33adasdasdsad333,13
    # print(re.sub('ad','你好啊,我不好',e,count=1)) # 只替换一次,默认是替换全部
    
    
    # re.fullmatch
    f = '12'
    # print(re.fullmatch('12',f)) # 匹配的字符与字符串完全一致才可以
    
    """
    .       默认匹配除
    之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
    ^       匹配字符开头,若指定flags MULTILINE,这种也可以匹配上
    $       匹配字符结尾, 若指定flags MULTILINE 
    *       匹配*号前的字符0次或多次, 
    +       匹配前一个字符1次或多次,
    ?       匹配前一个字符1次或0次 
    {m}     匹配前一个字符m次 
    {m}{n}  匹配前一个字符最少m次,最多n次 
    |       匹配|左或|右的字符
    (...)   分组匹配
    'A'     只从字符开头开始匹配 ,re.search("Aabc","alexabc") 是匹配不到的,相当于re.match('abc',"alexabc") 或^
    ''    匹配字符结尾,同$
    'd'    匹配数字0-9
    'D'    匹配非数字
    'w'    匹配[A-Za-z0-9]
    'W'    匹配非[A-Za-z0-9]
    's'     匹配空白字符、	、
    、
     , re.search("s+","ab	c1
    3").group() 结果 '	'
    '(?P...)' 分组匹配 re.search("(?P[0-9]{4})(?P[0-9]{2})(?P[0-9]{4}
    """
    
    # .
    # print(re.search('.','abc')) # <re.Match object; span=(0, 1), match='a'>
    # print(re.search('.','abc').group()) # a
    # print(re.search('.','
    abc')) # <re.Match object; span=(1, 2), match='a'>
    
    # ^
    # print(re.search('^ab','abc'))  # <re.Match object; span=(0, 2), match='ab'>
    # print(re.search('^ab','caaaabbbb')) #None 和re.match的作用是差不多的
    # print(re.search('^[0-9]{2}[a-z]{1}','12c1d')) # <re.Match object; span=(0, 3), match='12c'> 0-9数字+0-9数字+a-z字母
    
    # $
    # print(re.search('45$','123456'))  # None
    # print(re.search('45$','12345645'))
    
    # ^ $
    # print(re.search('^456$','456'))   #<re.Match object; span=(0, 3), match='456'> 以什么开头以什么结尾的
    # print(re.search('^[0-9][a-z]$','1a')) #<re.Match object; span=(0, 2), match='1a'>
    # print(re.search('^[0-9][a-z]$','1aaa')) #None
    
    # *
    # print(re.search('a*','aaa')) #<re.Match object; span=(0, 3), match='aaa'>
    # print(re.search('[a-z]*[0-9]*','aaa45')) #<re.Match object; span=(0, 5), match='aaa45'> a-z出现多次,0-9出现多次
    
    
    # +
    # print(re.search('a+', 'aaa'))  # <re.Match object; span=(0, 3), match='aaa'>
    # print(re.search('a+', 'bbb'))  # None
    
    # ?
    # print(re.search('a?', 'aaa'))  # <re.Match object; span=(0, 1), match='a'>
    # print(re.search('a?', 'bbb'))  # <re.Match object; span=(0, 0), match=''>
    
    # {m,n}
    # print(re.search('a{3,5}', 'aaaaaaaa'))  # <re.Match object; span=(0, 5), match='aaaaa'>
    # print(re.search('a{3,5}', 'aaaabaaaa'))  # <re.Match object; span=(0, 4), match='aaaa'>
    # print(re.search('a{3,5}', 'aaabaaa'))  # <re.Match object; span=(0, 3), match='aaa'>
    # print(re.search('a{3,5}', 'aabaa'))  # None
    
    #|
    # print(re.search('[0-9]|[a-z]','aaaa')) #<re.Match object; span=(0, 1), match='a'>
    # print(re.search('[0-9]|[a-z]','1111')) #<re.Match object; span=(0, 1), match='1'>
    # print(re.search('[0-9]|[a-z]','AAA')) #None
    
    
    #()()()
    print(re.search('([0-9])([a-z])','1aabbccdd11223344'))#<re.Match object; span=(0, 2), match='1a'>
    s = '11022219900816XXXX'
    ses = re.search('(?P<city>[0-9]{3})(?P<shiqu>[0-9]{3})(?P<year>[0-9]{4})(?P<month>[0-9]{2})(?P<day>[0-9]{2})',s)
    print(ses.groupdict())
    
    
    
    
    # print(re.findall('[0-9]{11}', str_name))  # findall是匹配到所有符合条件的,匹配的是数字,而且出现11位的数字,以列表形式返回
    
    # '.'     默认匹配除
    之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
    # a = re.search('.', '
    @aa')  # <re.Match object; span=(0, 1), match='@'>
    # b = re.match('.', '
    @aa')  # None 从开头查找符合条件的返回,因为
    不符合所以返回none
    # print(a)
    # print(b)
    
    
    data = """我始终!@@##¥%…………&alkjdfsb1234
    
    566667是中国人woaldsfkjzlkcjxv123*())<>
    """
    
    # 匹配所有汉字
    print(re.findall('[u4e00-u9fa5]', data))
    
    # 匹配所有单字符,英文,数字,特殊符号
    print(re.findall('[x00-xff]', data))
    
    # 匹配所有非单字符,入汉字和省略号
    print(re.findall('[^x00-xff]', data))
    
  • 相关阅读:
    HTML5 GeoLocation 地理定位
    HTML5 LocalStorage 本地存储
    JS-事件代理(委托)
    面向对象(封装、继承、多态)
    js图片预加载
    jQuery 事件
    svn无法验证
    Ext.data.Store(转)
    ExtJS实现Excel导出(转)
    <![CDATA[ ]]> 意思
  • 原文地址:https://www.cnblogs.com/shanshan-test/p/12716499.html
Copyright © 2020-2023  润新知