• python正则表达式补充


     1 import re
     2 origin= "hello alex bcd alex 1ge alex acd 19"
     3 r=re.match("(?P<n1>h)(?P<n2>w+)",origin)
     4 print(r.group())#获取匹配所有结果
     5 print(r.groups())#获取模型中匹配的分组结果
     6 print(r.groupdict())##获取模型中匹配的分组结果r=re.match("(?P<n1>h)(w+)",origin)
     7 '''
     8 hello
     9 ('h', 'ello')
    10 {'n2': 'ello', 'n1': 'h'}
    11 '''

    groups()就是显示选组(),而groupdict就是在分组加入一个关键字key

    a = "alex"
    n = re.findall('(w)(w)(w)(w)',a)
    print(n)
    n = re.findall('(w){4}',a)
    print(n)
    n = re.findall("",a) #匹配空['', '', '', '', '']会比字符串多一个,就是最后再匹配一次
    print(n)

    str1 = "1abc2abcq3abc4abc"
    t = re.findall('(dabc)*',str1)#结是为什么是['2abc', '', '4abc', '']
    #这个是因为匹配*为贪婪模式1abc2abc但括号取值取最后一个,到q是*可以为空,空匹配到,接着3abc4abc取后面4abc,完后还有一个空匹配
    print(t)
    运行结果

    [('a', 'l', 'e', 'x')]
    ['x']
    ['', '', '', '', '']
    ['2abc', '', '4abc', '']

     1 import re
     2 def f(n):
     3     while True:
     4         if re.search('d+.?d*[*/]d+.?d*',n):#匹配小数点
     5            ret=re.search('d+.?d*[*/]d+.?d*',n).group()
     6            # print(ret)
     7            t=re.split('([*/])',ret)
     8            # print(t)
     9            if t[1] == '*':
    10                sum = float(t[0])*float(t[2])
    11            else:
    12                sum = float(t[0])/float(t[2])
    13            n1 = n.replace(ret,str(sum))
    14            # print(n1)
    15            n = n1
    16            t.clear()
    17         else:
    18            break
    19     while True:
    20         if re.search('d+.?d*[+-]d+.?d*',n):
    21            ret=re.search('d+.?d*[+-]d+.?d*',n).group()
    22            # print(ret)
    23            t=re.split('([+-])',ret)
    24            # print(t)
    25            if t[1] == '+':
    26                sum = float(t[0])+float(t[2])
    27            else:
    28                sum = float(t[0])-float(t[2])
    29            n1 = n.replace(ret,str(sum))
    30            # print(n1)
    31            n = n1
    32            t.clear()
    33         else:
    34            break
    35     return n
    36 n1 = '1+0*(3*4+(1+3))+23-2.51*0'
    37 print(n1)
    38 flag = True
    39 while flag:
    40     t1=re.split('(([^()]+))',n1,1)#split分割出来去掉()
    41     if len(t1) == 3 :
    42         str1 = f(t1[1])#调用加减乘除函数
    43         t1[1]=str(str1)
    44         n1="".join(t1)
    45         # print(n1)
    46     else:
    47         flag = False
    48 n2=f(n1)
    49 print(n2)
    
    
    1 n='1+2*3+3*4'
    2 n1, count = re.subn('*','/',n)
    3 print(n1,count)
    运行结果
    1+2/3+3/4 2
    
    
    
    
    
  • 相关阅读:
    qmake理解(还可以加入Lex Yacc文件)
    如何在Qt 4程序中优化布局结构(表格讲解,很清楚)
    QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)
    Qt工具知多少(一目了然)
    分享个人如何DIY网站的经验
    推荐10款免费而优秀的图表插件
    异步上传文件
    JSON.stringify 方法
    Value Object(值对象)如何使用 EF 进行正确映射
    领域驱动设计(DDD)
  • 原文地址:https://www.cnblogs.com/wang43125471/p/7656379.html
Copyright © 2020-2023  润新知