正则表达式的初识
正则表达式(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\":\"(.*?)\"', )
参考资料: