匹配暗藏的密码(正则表达式第二弹)
Posted 我将在南极找寻你
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匹配暗藏的密码(正则表达式第二弹)相关的知识,希望对你有一定的参考价值。
(点击蓝字进入)
上次经过一番折腾,终于在最后成功匹配到了目标单词(I love you),小白同学感觉很好玩,于是想进一步探索,那么今天就跟着小白同学造作起来吧!
我们今天的目标是:
待检测的字符串含有特殊符号,以换行符“\n”为例
目标文本所在的字符串是这样子的:
s='ffsdxxhello xxfgfgxxworldxxhffh
现在我们按照上次讲的方法来操作一下
import re s='ffsdxxhello
xxfgfgxxworldxxhffh'
d=re.findall('xx(.*?)xx',s)
输出结果
['fgfg']
咦,为什么不一样呢?
细心的你应该发现了,待检测的字符串s是分两行的!
那么肯定存在一个换行符“\n”!
也就是说s实质上是下面这种形式:
s='ffsdxxhello\nxxfgfgxxworldxxhffh'
单独把xx包围的部分提取出来:
xxhello\nxxfgfgxxworldxx
没错,放大的部分属于第一行的内容。由于在第一行只有一个xx,所以匹配无效;接下来计算机开始检测第二行,发现“ffgg”被xx包围,于是将”ffgg“检测了出来;接着检测,发现只在最后出现了xx,无匹配目标,检测结束。
那如何才能检测出来我们的正确目标”hello world“呢?
换句话说,就是如何才能不因为换行而中断局部的检测呢?
也就是说,我们要将换行符”\n“看做字符串而不是起到换行作用的键。
Python提供了一种方法,即:.S
使用方法如下:
import re
s='ffsdxxhello
xxfgfgxxworldxxhffh'
d=re.findall('xx(.*?)xx',s,re.S)
结果:>>> d
['hello\n', 'world']
“是不是很神奇呢,自己动手操练一下吧!”,小白说。
以上是关于匹配暗藏的密码(正则表达式第二弹)的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性