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+\s\w+',a))
print(re.findall('(\w+)\s\w+',a))
print(re.findall('((\w+)\s\w+)',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']

 

转载于:https://www.cnblogs.com/q1ang/p/9038826.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值