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']
  • 相关阅读:
    .NET 回归
    Smart ORM v0.4.1开发计划
    计算4的1万次方的结果
    GMS Modem 短信收发组件
    计划任务的编成实现
    告别2007,展望2008
    Smart ORM v0.3发布(完全面向对象的轻量级ORM工具)
    Java中委托事件模型 (转)
    刚刚开通了博客,写点东西
    ASP.NET弹出对话框(转)
  • 原文地址:https://www.cnblogs.com/q1ang/p/9038826.html
Copyright © 2011-2022 走看看