re.match函数
re.match()
是从字符串的起始位置
开始匹配的,如果模式没有在字符串的开始位置找到,那么它会返回None
group()
方法是匹配对象(Match object)的一个方法,它用于获取匹配的部分或全部内容
groups()
:返回一个包含所有分组匹配内容的元组(如果没有分组,返回一个空元组)规则: re.match(pattern,string,flags) pattern:是匹配的规则内容 string: 要匹配的字符串 flag: 标志位(可选)控制正则表达式(pattern)的匹配方式 ———————————————— 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 为了增加可读性,忽略空格和 # 后面的注释
import re
# 示例1:使用group()返回整个匹配的内容
match = re.match(r"Hello (\w+)!", "Hello World!")
if match:
print(match.group()) # 输出:Hello World!
# 示例2:使用group(1)返回第一个括号内的匹配内容
match = re.match(r"Hello (\w+)!", "Hello World!")
if match:
print(match.group(1)) # 输出:World
# 示例3:使用groups()返回所有分组匹配的内容
match = re.match(r"Hello (\w+) (\w+)!", "Hello World Python!")
if match:
print(match.groups()) # 输出:('World', 'Python')
# 如果没有匹配,调用group()或group(n)会抛出AttributeError
# 因此在调用之前应该检查匹配对象是否为None
正则匹配规则
匹配单个字符
字符 | 功能 |
---|---|
. | 匹配任意1个字符(除了\n) |
[ ] | 匹配[ ]中列举的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配⾮数字,即不是数字 |
\s | 匹配空⽩,即空格,tab键 |
\S | 匹配⾮空⽩字符 |
\w | 匹配单词字符,即a-z、A-Z、0-9、_ |
\W | 匹配⾮单词字符 |
匹配多个字符
字符 | 功能 | 表达式实例 |
---|---|---|
* | 匹配前⼀个字符出现0次或者⽆限次,即可有可⽆ | abc* |
+ | 匹配前⼀个字符出现1次或者⽆限次,即⾄少有1次 | abc+ |
? | 匹配前⼀个字符出现1次或者0次,即要么有1次,要么没有 | abc? |
{m} | 匹配前⼀个字符出现m次 | ab{2}c |
{m,n} | 匹配前⼀个字符出现从m到n次,若省略m,则匹配0到n次,若省略n,则匹配m到无限次 | ab{1,2}c |
匹配开头结尾
字符 | 功能 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
匹配分组
字符 | 功能 |
---|---|
| | 匹配左右任意⼀个表达式 |
(ab) | 将括号中字符作为⼀个分组 |
\num | 引⽤分组num匹配到的字符串 |
(?P<name>) | 分组起别名,匹配到的子串组在外部是通过定义的 name 来获取的 |
(?P=name) | 引⽤别名为name分组匹配到的字符串 |
re.compile 函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供
match()
和search()
这两个函数使用。re.compile(pattern, flags=0)
re.search函数
re.findall函数
re.finditer函数
pattern: 匹配的规则, string : 要匹配的内容, flags 标志位 这个是可选的,就是可以不写,可以写, 比如要忽略字符的大小写就可以使用标志位 flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为: --- 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 为了增加可读性,忽略空格和 # 后面的注释
re.sub函数
sub是substitute的所写,表示替换;
参数 | 描述 |
---|---|
pattern | 必选,表示正则中的模式字符串 |
repl | 必选,就是replacement,要替换的字符串,也可为一个函数 |
string | 必选,被替换的那个string字符串 |
count | 可选参数,count 是要替换的最大次数,必须是非负整数。如果省略这个参数或设为 0,所有的匹配都会被替换 |
flag | 可选参数,标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
re.subn函数
行为与sub()相同,但是返回一个元组 (字符串, 替换次数)。
import re
pattern = re.compile(r'(\w+) (\w+)')
s = 'i say, hello world!'
print(re.subn(pattern, r'\2 \1', s))
def func(m):
return m.group(1).title() + ' ' + m.group(2).title()
print(re.subn(pattern, func, s))
### output ###
# ('say i, world hello!', 2)
# ('I Say, Hello World!', 2)
re.split函数
匹配进⾏切割字符串,并返回⼀个列表。
re.split
(pattern, string, maxsplit=0, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串 |
maxsplit | 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数 |
贪婪和⾮贪婪
Python⾥数量词默认是贪婪的(在少数语⾔⾥也可能是默认⾮贪婪),总是尝试匹配尽可能多的字符;⾮贪婪则相反,总是尝试匹配尽可能少的字符。 --- Python⾥数量词默认是贪婪的(在少数语⾔⾥也可能是默认⾮贪婪),总是尝试匹配尽可能多的字符;⾮贪婪则相反,总是尝试匹配尽可能少的字符。 例如:正则表达式”ab*”如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量词”ab*?”,将找到”a”。 注:我们一般使用非贪婪模式来提取。 在"*","?","+","{m,n}"后⾯加上?,使贪婪变成⾮贪婪。
r的作用
在Python的`re`模块中,用于定义正则表达式字符串时,前缀`r`或`R`用于表示原始字符串(raw string)。 原始字符串不会处理反斜杠(`\`)作为转义字符。在普通的字符串中,`\`经常用于引入转义字符(例如`\n`代表换行符,`\t`代表制表符等)。但是,在正则表达式中,`\`也是一个特殊的字符,用于表示元字符(metacharacters),例如`\d`用于匹配任何数字。