秋名山老司机(Bugku)
python 快速计算
贴代码·
import requests
import re
url = 'http://123.206.87.240:8002/qiumingshan/'
s = requests.session()
q = s.get(url)
match = re.search(r'(\d+[+\-*]+)+\d+',q.text).group()
b=eval(match)
payload={'value':b}
result=s.post(url,data=payload)
print (result.text)
直接print(q.text)
<head>
<title>下é¢çš„表达å¼çš„值是秋å山的车速</title>
<meta charset="UTF-8">
</head>
<p>亲请在2så†
计算è€å¸æœºçš„车速是多少</p>
<div>136827712+596201102-1362033947+389020038*1805510386+1673464924-1803233829*1633153167-1902107380-1861605492*241002176=?;</div>
<style>
div,p{
text-align: center;
margin: 0 auto;
}
</style>
之后再匹配 \d 代表字符串 + [±/]代表加减乘除 + \d
group()为打印出此表达式给match,用正则表达式,\d+表示一个或者多个数字,[]里为任意一个字符,这里为匹配±,-需要转义,将这两项括号括起来+,这样才可以匹配多个这样类型的表达式,最后加上一个\d+。
import re
a = "123qqq456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) #123qqq456,返回整体
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1) #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2) #qqq
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3) #456
1. 正则表达式中的三组括号把匹配结果分成三组
group() 同group(0)就是匹配正则表达式整体结果
group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3)
2. 列出第三个括号匹配部分。
没有匹配成功的,re.search()返回None
^:行开头
\d:数字
+:出现至少1次
.:任意字符,除换行和回车之外
?:出现0或1次
(.\d+)?:括号里内出现0或1次
$:行结尾
就是说字符串是数字,并且有可能是小数,因为(.\d)?表示可能带小数
也就是说例如 28 或者28.36都是这个正则能匹配的
eval(match)
eval(expression, globals=None, locals=None) — 官方文档中的解释是,将字符串str当成有效的表达式来求值并返回计算结果
可能输出没有结果,需要多运行几次