zoukankan      html  css  js  c++  java
  • re.findall()正则表达式中括号的坑

    import re
    # 7/   3*   99/   4*   2998
    # +d[*/]
    # 2*   5/   3
    content='1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))+(2+3*2) '
    
    zzz=re.compile('(d+[*/])+d+')
    a1=zzz.findall(content)
    print(a1)
    a2=zzz.search(content).group()
    print(a2)
    a3=re.search('(d+[*/]){4}d+',content).group()
    print(a3)
    a4=re.findall('(d+[*/]){4}d+',content)
    print(a4)
    >>>
    ['40/', '5/', '4*', '568/', '4*', '3*', '3*']
    40/5
    7/3*99/4*2998
    ['4*']

    在用re写计算器的时候发现findall和search在相同的正则表达式下得到的结果大不相同(尽管search只匹配第一个结果)

    发现findall在正则表达式有括号和没有括号的情况下,结果不同

    a='q1ang q2ang q3ang q4ang'
    
    print(re.findall('w+sw+',a))
    print(re.findall('(w+)sw+',a))
    print(re.findall('((w+)sw+)',a))
    >>>
    ['q1ang q2ang', 'q3ang q4ang']
    ['q1ang', 'q3ang']
    [('q1ang q2ang', 'q1ang'), ('q3ang q4ang', 'q3ang')]

     在正则表达式有一个括号的时候,仅仅匹配括号内的内容

    当有两个括号时,它会分别匹配括号由内向外的内容,经结果存在元组中再给列表

    找到一个解决办法,用(?:re)的方法来去除组

    content='1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))+(2+3*2) '
    #
    zzz=re.compile('(?:d+[*/])+d+')
    a1=zzz.findall(content)
    print(a1)
    >>>
    ['40/5', '2*5/3', '7/3*99/4*2998', '10*568/14', '4*3', '3*2', '3*2']
  • 相关阅读:
    Web开发(二)HTML
    Web开发(一)基础
    Python基础(十二)并发编程02
    Python基础(十一)并发编程01
    Python基础(十)socket编程
    Python基础(九)异常
    计算机基础
    Python基础(八)面向对象02
    jmeter使用正则表达式提取数据
    jmeter+ant 实现自动化接口测试环境配置
  • 原文地址:https://www.cnblogs.com/q1ang/p/9038826.html
Copyright © 2011-2022 走看看