0%

re正则表达式学习

正则表达式的初识

正则表达式(Regular Expression) 是一种文本模式,用于匹配和筛选特定格式的文本字符串等。

为了做数据处理相关的题目,所以顺便看看学习和了解一下。

量词

正则表达式 – 教程 | 菜鸟教程上举了一个例子让我对正则有了一种熟悉的感觉:

例如,您很可能使用 ? 和 ***** 通配符来查找硬盘上的文件。**?** 通配符匹配文件名中的 0 个或 1 个字符,而 ***** 通配符匹配零个或多个字符。

确实,在某些关键字被waf的情况下,常常会用find ~ -name "fla*",``find ~ -name “f???”之类的通配符来绕过,这和正则中的符号有些类似。于是目前便自然而然的知道了这两个符号的用法。而剩下的一个量词+则是匹配前面的模式一次或多次,可以理解为**必须有**。也可以 {n,m} `来实现确切的次数范围。

img

这是菜鸟教程中的一个例子,表示匹配前面的字符集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方法

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

注意: matchsearch 是匹配一次, findall 匹配所有。经常会有只用search导致匹配的不够。

暂时先看这么多,后面再用继续看即可。

re.finall('\"msg\":\"(.*?)\"', )

参考资料:

正则表达式 – 教程 | 菜鸟教程

Python3 正则表达式 | 菜鸟教程