Python标准库RE(正则表达式)使用教程 (1)

_Achry_

7拍游戏
2022/08/22
14
8
3
在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个python自带的模块,名字为re。

正则表达式的大致匹配过程是:
1.依次拿出表达式和文本中的字符比较,
2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。
3.如果表达式中有量词或边界,这个过程会稍微有一些不同。

r:Python 中字符串的前导 r 代表原始字符串标识符,该字符串中的特殊符号不会被转义,适用于正则表达式中繁杂的特殊符号表示。 因此 r"\n" 表示包含 '\' 和 'n' 两个字符的字符串,而 "\n" 则表示只包含一个换行符的字符串。

9048568ac9b046d0b798de13416a435f.png

re模块的使用:import re

re.match函数​

语法:re.match(pattern, string, flags=0)

patternstringflags
匹配的正则表达式要匹配的字符串标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和 # 后面的注释

尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。匹配成功re.match方法返回一个匹配的对象。

如果上⼀步匹配到数据的话,可以使⽤group⽅法来提取数据。以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group()用来提出分组截获的字符串,()用来分组,group() 同group(0)就是匹配正则表达式整体结果,group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。没有匹配成功的,re.search()返回None。

举例:

9f9cb4ef3f6c4ffb8bd5d4c7661504a2.png

从string头开始匹配pattern完全可以匹配,pattern匹配结束,同时匹配终止,后面的.cn不再匹配,返回匹配成功的信息。

字符.[]/d/D/s/S/w/W/w /W
功能匹配任意字符(除了\n)匹配[]中举例的字符匹配数字匹配非数字匹配空白匹配非空白
匹配单词字符
匹配非单词字符
匹配单词字符/匹配非单词字符
位置可以写在字符集[...]中可以写在字符集[...]中可以写在字符集[...]中可以写在字符集[...]中可以写在字符集[...]中可以写在字符集[...]中

[...]字符集,对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,比如[abc]和[a-c],第一个字符如果是^表示取反。所有特殊字符(比如"]""-""^")在字符集中都失去原来的含义,如要使用可把"]""-"放在第一个字符,"^"放在非第一个字符。

举例:
1379de18c58945c49df0b02819d6fe3d.png

结果:

M
too
two
h
H
h
H
Hello Python
7Hello Python
7Hello Python
7Hello Python
嫦娥1号
嫦娥2号

匹配多个字符

Screenshot_20230501_194647.jpg



举例

0261f742387d4a4dab9c41248b34846b.png

结果:
M
Mnn
Aabcdef
变量名 name1 符合要求
变量名 _name 符合要求
变量名 2_name ⾮法
变量名 __name__ 符合要求
7
33
0
12a3g4
1ad12f23s34455ff66

匹配开头结尾

^$
匹配字符串开头匹配字符串结尾

举例:匹配163.com的邮箱地址

afb3687e7fd04bbfbeb1dbda261d5756.png

匹配分组

Screenshot_20230501_195921.jpg

举例



c135dcca549a4a6d8cb9a1e3c1c41f30.png


举例:\number

匹配数字代表的组合。每个括号是一个组合,组合从1开始编号。比如 (.+) \1 匹配 'the the' 或者 '55 55', 但不会匹配 'thethe' (注意组合后面的空格)。这个特殊序列只能用于匹配前面99个组合。如果 number 的第一个数位是0, 或者 number 是三个八进制数,它将不会被看作是一个组合,而是八进制的数字值。在 '[' 和 ']' 字符集合内,任何数字转义都被看作是字符。

例子1:匹配出 <html>hh</html>
\1,...,\9,匹配第n个分组的内容。如例子所示,指匹配第一个分组的内容。

273111ba16544df5a72c1173df5823fc.png

结果:

<html>hh</html> 这是一对正确的标签
<html>hh</htmlbalabala> 这是⼀对不正确的标签

例子2:匹配出 <html><h1>www.itcast.cn</h1></html>

6a4220379ced40558892b4918b83a6ac.png

结果:

<html><h1>www.itcast.cn</h1></html> 是符合要求的标签
<html><h1>www.itcast.cn</h2></html> 不符合要求


举例:(?P<name>) (?P=name)

一个用于标记,一个用于在同一个正则表达式中复用

import re

ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>","<html><h1>www.itcast.cn</h1></html>")

ret.group()

ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>","<html><h1>www.itcast.cn</h2></html>")

#ret.group()

(sbohh不让我加图片了sb)


————————————————
版权声明:本文为CSDN博主「nee~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/guo_qingxia/article/details/113979135
 

关于我们

  • 我们的社区已经存在很长一段时间,并且大量用户的支持使我们非常自豪,我们每天都在努力确保我们的社区是最好的社区之一。该社区是由玩家自主建立的,与7th Beat Game无关!如果社区的内容侵犯到了您的权益,请联系社区负责人:495163139@qq.com

快速导航

用户菜单