Bc09百米(re模块)

BC09百米(re模块)

BC09百米(re模块)

和上一题类似,正则搜索字符串,处理数据计算出答案,提交.

题目 

知识点一:regular expression ,我倾向于把它翻译为通用匹配规则,它的通常翻译 正则表达式,不够通俗易懂,听起来像是二次互反律、混沌动力学、豫解核、单纯剖分、共轭泛函、拓扑…… 对于初学者来说,名字就给你吓尿了,这么难还学个屁啊~啊摔!……实际上一点都不复杂2333,就是为了描述字符串的形式的规定而已。

通用匹配规则,有两种符号,一种是普通符号,一种是特殊符号。

普通符号:a就是a,b就是b,T就是T,App就是App,不是aPP 也不是Spp。

特殊符号:\d   表示0,1,2,3,4,5,6,7,8,9

                  \w  表示A 、B、 C…… X 、Y 、Z …… a 、b、 c……  x、y、z…… 0、1、2…… 9

                  \s  表示  空白

                  \b  用法是      \bapp\b  表示app这个单词是单独的,不是sapp,不是apple。

                 | 表示或者

                 .    点 代表任何字符,除了\n 换行符

                 *  + ? {}  这四个符号代表数量,a* 表示a不存在或者有很多a(aaaaaaaa),a数量>1 |  =0

                 a+ 表示有一个a 或者有很多a,a数量 >=1

                 ? 表示a数量 =0 | = 1

                 { } 花括号里面是数字,表达了出现的次数

                 [ ] 用法是表示可选项,2[1256 ] 表示 21、22、25或者26。

                 ^  …… $ 这里开头和结尾的符号 就表示字符串开始和结尾。^ 、$可以单独用,也可以一起用。

               [ ^    ] 还表示排除,用法是[ ^ \d] 表示除了数字以外的字符。


先写出框架


实验一下,表达式找出4位数字,19行:myre = '\d{4}' 


发现几次都是1999,没有找到题目

发现是找到第一个四位数就输出了

更改表达式为 myre = '\(\d{4}' 用反斜杠转义左括号,实验成功匹配

再次更改表达式myre = '\(\d{4}+',实验失败。。发现忘记了空格符号。


后面加\s表达空格符号,之后是   '.{46}' 

点号表示任意符号,46表示有46个该符号。



知识点二:字符替换,由于搜索出来的数字运算式子,其中的 x  ,是英文小写字母而不是乘法*,所以要替换一下,再运算。

re.sub('原字符','替换字符串','要搜查TXT')

知识点三:效率提升,将正则表达式预编译,可以提升搜查效率。

myre = re.compile(''\(\d{4}\s+.{46}'')


查看要提交的post,参数是pass_key,用计算出的答案提交




还是失败了。思考了半响,明白了,这是由于第一次urllib获取HTML到本地,第二次request提交,每一次的题目都是不一样的。

也就是说我们把第一次的题目的答案给了第二次的题目,所以会出错。

用requests 获取网页内容,提交


然而并没有什么卵用。。。。

我数了一下,十多秒…… 果然还是太慢了吗?

将第六行   char.content  改成 char.text ,因为content是逐字节读取,所以速度会慢。(已经成功在三秒之内了,但还是失败)


看别人答案。。。


用session保持网页交互,使得题目和答案匹配,不会将第一次题目答案交给第二次访问的题目。