正则表达式的初识
正则表达式(Regular Expression) 是一种文本模式,用于匹配和筛选特定格式的文本字符串等。
为了做数据处理相关的题目,所以顺便看看学习和了解一下。
量词
在正则表达式 – 教程 | 菜鸟教程上举了一个例子让我对正则有了一种熟悉的感觉:
例如,您很可能使用 ? 和 ***** 通配符来查找硬盘上的文件。**?** 通配符匹配文件名中的 0 个或 1 个字符,而 ***** 通配符匹配零个或多个字符。
确实,在某些关键字被waf的情况下,常常会用find ~ -name "fla*",``find ~ -name “f???”之类的通配符来绕过,这和正则中的符号有些类似。于是目前便自然而然的知道了这两个符号的用法。而剩下的一个量词+则是匹配前面的模式一次或多次,可以理解为**必须有**。也可以 {n,m} `来实现确切的次数范围。

这是菜鸟教程中的一个例子,表示匹配前面的字符集3到15次,^和$分别表示匹配字符串的首尾。
边界匹配
^:匹配字符串的开头。(在字符集中表示反选)$:匹配字符串的结尾。\b:匹配单词边界。\B:匹配非单词边界。
元字符
\w: 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
\d: 匹配任意一个阿拉伯数字(0 到 9)。等价于 [0-9]
\s: 匹配所有空白符,包括换行。
\S: 非空白符,不包括换行。
贪婪与非贪婪模式
通过在 *、+ 或 ? 限定符之后放置 **?**,该表达式从”贪婪”表达式转换为”非贪婪”表达式或者最小匹配。
1 | <h1>RUNOOB-菜鸟教程</h1> |
如果是用/<.*>/来匹配则会匹配上面的所有字符。而要想只匹配h1标签头,则可以在* 限定符之后放置 **?**,/<.*?>/这样即可。
Python3中的正则表达式
在python中常常用re模块来处理正则。
匹配
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 None。
函数语法:
1 | re.match(pattern, string, flags=0) |
函数参数说明:
| 参数 | 描述 |
|---|---|
| pattern | 匹配的正则表达式 |
| string | 要匹配的字符串。 |
| flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
捕获
在pattern中用圆括号括起来的部分是可以被捕获字串,我们可以使用 group(num) 或 groups() 匹配对象函数来获取匹配表达式。
| 匹配对象方法 | 描述 |
|---|---|
| group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
| groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
re.findall方法
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次, findall 匹配所有。经常会有只用search导致匹配的不够。
暂时先看这么多,后面再用继续看即可。
re.finall('\"msg\":\"(.*?)\"', )
参考资料: