Python正则表达式详解

Python正则表达式详解

1. Python中的正则表达式

导入re模块后,您可以开始使用正则表达式。

例如:搜索字符串以查看它是否以“The”开头并以“Spain”结尾:

import re

txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)
if x:
    print("匹配成功")
else:
    print("匹配失败")

运行:

image-20221009190017960

2. 正则表达式函数

2.1 findall() 函数

该findall()函数返回一个包含所有匹配项的列表。如果未找到匹配项,则返回一个空列表。

例如:打印所有匹配项的列表

txt = "木子Teng菜鸟啊菜鸟啊"
x = re.findall("菜鸟", txt)
print(x)  # ['菜鸟', '菜鸟']

2.2 search() 函数

该search()函数在字符串中搜索匹配项,如果有匹配项,则返回一个Match 对象。如果有多个匹配项,则只返回匹配项的第一次出现。

如果未找到匹配项,则返回None。

例如:搜索字符串中的第一个空白字符:

import re

txt = "木子Teng 呢"
x = re.search("\s", txt)
print(f"第一个空格字符位于位置:{x.start()}")  # 6

2.3 split() 函数

该split()函数返回一个列表,其中的字符串在每次匹配时被拆分。

例如:在每个空白字符处拆分

import re

txt = "木子 Teng 呢"
x = re.split("\s", txt)
print(x)  # ['木子', 'Teng', '呢']

您可以通过指定maxsplit 参数来控制出现次数

例如:仅在第一次出现时拆分字符串:

txt = "木子 Teng 呢"
x = re.split("\s", txt, 1)
print(x)  # ['木子', 'Teng 呢']

2.4 sub() 函数

该sub()函数用您选择的文本替换匹配项。

例如,将木替换为水

import re

txt = "木子Teng"
x = re.sub("木", "水", txt)
print(x)  # 水子Teng

您可以通过指定count 参数来控制替换次数 :

txt = "木木子Teng"
x = re.sub("木", "水", txt, 1)
print(x)  # 水木子Teng

3. 元字符

常用元字符的含义见下表

元字符含义
.匹配任意字符(除换行符\r,\n)
^匹配字符串的开始位置
$匹配字符串的结束位置
*匹配该元字符的前一个字符任意出现次数(包括0次)
+匹配一次或者多次出现
\转义字符,其后的一个元字符失去特殊含义,匹配字符本身
{}恰好指定的出现次数
[]字符集,范围内的所有字符都能被匹配
|匹配两者任一

上述元字符都比较好理解,这里不再进行演示。

4. 特殊序列

普通字符含义
\W匹配非数字、字母、下划线、汉字
\w匹配数字、字母、下划线、汉字
\S匹配任意非空白字符
\s匹配任意空白字符
\D匹配非数字
\d匹配数字
\A如果指定的字符位于字符串的开头,则返回匹配项。
\b返回指定字符位于单词开头或结尾的匹配项 。
\B返回存在指定字符但**不在单词开头(或结尾)**的匹配项
\Z指定的字符位于字符串的末尾,则返回匹配项

演示:

txt = "菜鸟在这里"
x = re.findall("\A菜", txt)
print(x)  # ['菜']
txt = "菜鸟在这里"
# 开头的“r”确保字符串被视为原始字符串
x = re.findall(r"\b菜", txt)  # 匹配开头
print(x)  # ['菜']
x = re.findall(r"里\b", txt)  # 匹配结尾
print(x)  # ['里']

5. 匹配对象

匹配对象是包含有关搜索和结果的信息的对象。注意:如果没有匹配,None将返回值,而不是匹配对象。

直接举个例子:

执行将返回匹配对象的搜索

import re

#search() 函数返回一个 Match 对象:

txt = "hello world"
x = re.search("wo", txt)
print(x)

image-20221009192133540

Match 对象具有用于检索有关搜索和结果的信息的属性和方法:

span()返回一个包含匹配开始和结束位置的元组。
string返回传递给函数的字符串
group()返回字符串中匹配的部分

5.1 span() 函数

例如:打印第一个匹配项的位置(开始和结束位置)。正则表达式查找任何以大写“S”开头的单词:

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())  # (12,17)
print(x.string)  # The rain in Spain

5.2 string 属性

例如:打印传递给函数的字符串

import re

#返回字符串

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)  # The rain in Spain

5.3 group() 函数

例如:打印字符串中匹配的部分。正则表达式查找任何以大写“S”开头的单词

import re

#搜索单词开头的大写“w”字符,并打印该单词:

txt = "hello world"
x = re.search(r"\bw\w+", txt)
print(x.group())  # world
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ambition0823

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值