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]
表示除了数字以外的字符。


先写出框架

::: {.image-package}
\

::: {.image-caption}
:::
:::

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

::: {.image-package}
\

::: {.image-caption}
发现几次都是1999,没有找到题目
:::
:::

::: {.image-package}
\

::: {.image-caption}
发现是找到第一个四位数就输出了
:::
:::

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

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

::: {.image-package}
\

::: {.image-caption}
:::
:::

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

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

::: {.image-package}
\

::: {.image-caption}
:::
:::


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

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

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

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


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

::: {.image-package}
\

::: {.image-caption}
:::
:::

\

::: {.image-package}
\

::: {.image-caption}
:::
:::

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

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

用requests 获取网页内容,提交

::: {.image-package}
\

::: {.image-caption}
:::
:::

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

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

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


看别人答案。。。

::: {.image-package}
\

::: {.image-caption}
:::
:::

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


::: {.image-package}
\

::: {.image-caption}
:::
:::


:::
:::
:::