zoukankan      html  css  js  c++  java
  • python正则表达式解析(re)

    正则表达式的使用方法主要有4种: re.search(进行正则匹配), re.match(从头开始匹配)  re.findall(找出所有符合条件的字符列表)  re.split(根据条件进行切分)  re.sub(根据条件进行替换)

    匹配规则里的符号

    # . 可以被当作任意字符, re.M 忽略开头的换行符

    res = re.match('^c.+d', 'cheng123ronghua', flags=re.M)
    print(res)

    # ^ 匹配当前字符串的开头, ^c表示已c开头,a$以a为结尾

    res = re.search('^c[a-z]+a$', 'cdasda')
    print(res.group())

    # $ 表示结尾

    res = re.search('r[a-zA-Z]+a$', 'cheng321ronGHua123aronghua')
    print(res.group())

    # * 表示匹配0个或者多个

    print(re.findall('ab*', 'alexabbtomab'))
    
    # ['a', 'abb', 'ab']

    # + 表示匹配一个或者多个

    print(re.findall('xd+a', 'alex123abc'))
    
    # ['x123a']

    # ? 匹配0个或者一个

    print(re.findall('宋惠乔?', '宋惠 宋惠乔'))
    
    # ['宋惠', '宋惠乔']

     # {1,3} 匹配一个到三个之间

    print(re.findall('[0-9]{1,3}', 'alex123alex1alex12'))
    
    # ['123', '1', '12']

    # | 进行或操作的匹配,匹配其中一个即可

    print(re.search('abc|ABC', 'abcABCCD').group())
    
    # abc

    # 将需要匹配的字母进行统一的保存

    string = re.search('(abc){2}(||=){2}', '123abcabc||=||=')
    print(string.group())
    
    # abcabc||=||=

    # A 表示以什么开头, 相当于上面的^ 

    print(re.search('Aa.+b', 'a123b').group())
    
    # a123b

    #  表示以什么结尾,相当于上面的$ 

    print(re.search('b.+d', '11b23d').group())
    
    # b23d

    # D 匹配非数字

    print(re.search('D+', '123$-a').group())
    
    # $-a

    # w 匹配数字或者字母

    print(re.search('w+ow+', 'the old tsoms').group())
    
    # tsoms

    # W 匹配非数字或者字母

    print(re.search('W+', 'abc123%-%-%abc').group())
    
    # %-%-%

    # s 匹配空包字符  

    print(re.findall('s+', 'sd 
     sd'))
    
    # [' 
     ']

    # (?P<>[]+) 进行分组构造字典

    A = re.search('(?P<id>[0-9]+)(?P<name>[a-z]+)', '123alex')
    print(A.groupdict())
    
    # {'id': '123', 'name': 'alex'}

    # re.split() 进行数据切分

    print(re.split('[ ]+', '123  123 12'))
    
    # ['123', '123', '12']

    # re.sub 表示将数字进行替换| 

    print(re.sub('[0-9]+', '|', 'acv1dae2dasd3ads'))
    
    # acv|dae|dasd|ads

    # 进行反斜杠匹配 r'\'

    print(re.split(r'\', r'abc123'))
    
    # ['abc', '123']

    # re.I 忽略大小写

    print(re.search('[a-z]+', 'abcA', re.I).group())
    
    # abcA

    # re.M 忽略开头的

    print(re.search('^d123', '
    d123456', flags=re.M).group())
    
    # d123

    # re.S 匹配所有的字符串,包括换行符

    print(re.findall(r'd.+s', 'd123
    
    s123', flags=re.S))
    
    # ['d123
    
    s']

    这里编写了一个简单的计算器 

    import re
    
    s = '1-2*((60-30 +(9-2*5/3+7/3*99/4*2998+10*568/14)*(-40 / 5))-(-4*3)/(16-3*2))'
    s = s.replace(' ', '')
    print(eval(s))
    def get_grap(string):
    
        x = re.compile('([^()]+)').search(string)
        if x == None:
            return string
        else:
            return x.group()
    
    
    def cal(x):
        if '*' in x:
            return float(x.split('*')[0]) * float(x.split('*')[1])
        else:
            return float(x.split('/')[0]) / float(x.split('/')[1])
    
    def cal_sum(x):
        if '+' in x :
            return float(x.split('+')[0]) + float(x.split('+')[1])
        elif '-' in x:
            return float(x.split('-')[0]) - float(x.split('-')[1])
    
    def cal_grap(x):
        # 找出其中的乘和除
        while True:
            y = re.compile('d+(.d+)?[*/]-?d+(.d+)?').search(x)
            if y == None:
                break
            y = y.group()
            x = x.replace(y, str(cal(y)))
        #找出其中的加减操作
        while True:
            if re.search('[+][-]', x) != None:
                 x = re.sub('[+][-]', '-', x)
            elif re.search('[-][-]', x) != None:
                 x = re.sub('[-][-]', '+', x)
    
    
            y = re.compile('-?d+(.d+)?[+-]d+(.d+)?').search(x)
            if y == None:
                break
            y = y.group()
            x = x.replace(y, str(cal_sum(y)))
    
        return x
    
    
    while True:
        if re.compile('d+(.d+)?').search(s) != None:
            if re.compile('d+(.d+)?').search(s).group() == s:
                break
    
        x = get_grap(s)
        if re.search('(.+)', x) != None:
            all = cal_grap(x)[1:-1]
        else:
            all = cal_grap(x)
        s = s.replace(x, all)
    
    print(s)
  • 相关阅读:
    AtCoder Regular Contest 093
    AtCoder Regular Contest 094
    G. Gangsters in Central City
    HGOI 20190711 题解
    HGOI20190710 题解
    HGOI 20190709 题解
    HGOI 20190708 题解
    HGOI20190707 题解
    HGOI20190706 题解
    HGOI 20190705 题解
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/11475109.html
Copyright © 2011-2022 走看看