Python之re模块详解(正则表达式)

作者永不落的梦想

作者主页传送

座右铭过去属于死神,未来属于自己

本文专栏Python篇

今日鸡汤人最大的对手,就是自己的懒惰

目录

一、概述

二、正则表达式模式

三、re模块常用方法

四、正则匹配案例


一、概述

        正则表达式是一个特殊的字符序列,方便检查一个字符串是否与某种模式匹配;

        Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式,re 模块使 Python 语言拥有全部的正则表达式功能。

二、正则表达式模式

模式描述

 字符类

a,b,c,1,2,3字符常量,直接匹配常量
\d匹配一个数字
\D匹配一个非数字
\s匹配一个空格
\S匹配一个非空格
\w匹配一个字母、数字或下划线
\W匹配一个非字母、数字、下划线
[abcd]匹配abcd中任意一个字符
[a-d]匹配a-d中任意一个字符
[^a-d]匹配除a-d外的任意一个字符
[0-5]匹配0-5中任意一个字符
.匹配除\n外的任意一个字符
量词
*0或多个
+1或多个
?0或1个
{3}3个
{2,5}2-5个
{3,}至少3个
{,4}最多4个
组合模式
\d{3}[a-z]{3}直接拼接多个子模式,表示3个数字连接3个小写字母
\d{3}|[a-z]{3}模式并存,表示匹配3个数字或3个小写字母
(abc){3}

分组,表示abc为一组匹配3个即abcabcabc

(abc)(ha)(\1)分组调用,\1表示第一个分组即匹配abchaabc
位置
^匹配开头
$匹配末尾
\A匹配字符串开始
\Z匹配字符串结束
\b匹配单词边界
\B匹配非单词边界
标记
re.I忽略大小写
re.M多行匹配
re.X允许空格和注释
re.S.可匹配\n
特殊字符
\n匹配换行符
\r匹配回车符
\t匹配tab符
import re
# 简单正则模式匹配案例
s = '123abc,hello word! HHHaa'

# 匹配模式:r'abc'            匹配结果:匹配成功

# 匹配模式:r'\d+abc'         匹配结果:匹配成功

# 匹配模式:r'\d{3}[a-z]{3}'  匹配结果:匹配成功

# 匹配模式:r'\d+[a-z]'       匹配结果:匹配成功

# 匹配模式:r'^[a-zA-Z]+'     匹配结果:匹配失败

# 匹配模式:r'Haa/b'          匹配结果:匹配成功

# 匹配模式:r'^[^a-z]'        匹配结果:匹配成功

# 匹配模式:r'\d{1,}'         匹配结果:匹配成功

# 匹配模式:r'a.c'            匹配结果:匹配成功

# 匹配模式:r'[a-z]{2,}$'     匹配结果:匹配成功

注意:

        标点符号只有被转义时才匹配自身,否则它们表示特殊的含义;

        反斜杠本身需要使用反斜杠转义;

        由于正则表达式通常都包含反斜杠,所以最好使用原始字符串来表示它们,模式元素(如 r'\t',等价于 \\t) 匹配相应的特殊字符;

三、re模块常用方法

查找
re.search()只返回一个匹配结果的对象
re.match()从头匹配且只返回一个匹配结果的对象
re.findall()返回元素为所有匹配结果的列表
re.finditer()返回Match迭代器的对象
替换
re.sub()返回所有匹配结果被替换后的字符串
re.subn()返回元素为替换后的字符串和替换次数的元组
分割
re.split()返回元素为以匹配模式作为分隔后的字符串的列表
# re模块常用方法使用案例
import re

a = '22abc,Abc,ABC,aj145a,kl8899'

# re.search(),只返回一个匹配结果的对象
m1 = re.search(r'\d{2}', a, flags=re.I)
print('\nre.search()的结果:')
print(m1)

# re.match(),从头匹配且只返回一个匹配结果的对象
m2 = re.match(r'j\d{2}', a)
m3 = re.match(r'\d{2}', a)
print('\nre.match()的结果:')
print(m2)
print(m3)

# re.findall(),返回元素为所有匹配结果的列表
m4 = re.findall(r'\d{2}', a)
print('\nre.findall()的结果:')
print(m4)

# re.finditer(),返回Match迭代器的对象
m5 = re.finditer(r'\d{2}', a)
print('\nre.finditer()的结果:')
for i in m5:
    print(i)

# re.sub(),返回所有匹配结果被替换后的字符串
m6 = re.sub(r'\d{2}', '--', a)
print('\nre.sub()的结果:')
print(m6)

# re.subn(),返回元素为替换后的字符串和替换次数的元组
m7 = re.subn(r'\d{2}', '--', a)
print('\nre.subn()的结果:')
print(m7)

# re.split(),返回元素为以匹配模式作为分隔后的字符串的列表
b = 'ahs,  ajka  / koi12 ? jk'
m8 = re.split(r'\s*[,/?]\s*', b)
print('\nre.split()的结果:')
print(m8)



# 输出

re.search()的结果:
<re.Match object; span=(0, 2), match='22'>

re.match()的结果:
None
<re.Match object; span=(0, 2), match='22'>

re.findall()的结果:
['22', '14', '88', '99']

re.finditer()的结果:
<re.Match object; span=(0, 2), match='22'>
<re.Match object; span=(16, 18), match='14'>
<re.Match object; span=(23, 25), match='88'>
<re.Match object; span=(25, 27), match='99'>

re.sub()的结果:
--abc,Abc,ABC,aj--5a,kl----

re.subn()的结果:
('--abc,Abc,ABC,aj--5a,kl----', 4)

re.split()的结果:
['ahs', 'ajka', 'koi12', 'jk']

四、正则匹配案例

匹配Email地址的正则表达式
\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*
匹配网址URL的正则表达式
[a-zA-Z]+://[^\s]*
匹配腾讯QQ号的正则表达式
[1-9]\d{4,}
匹配身份证号的正则表达式
\d{15}|\d{18}
匹配IPv4地址的正则表达式
(\d{1,3}).(\1).(\1).(\1)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,我可以回答你关于Python正则表达式的问题。 Python正则表达式是一种用来匹配和处理字符串的工具。它可以在字符串中搜索和匹配特定的模式,以实现更高效和精确的数据处理。Python的re模块提供了完整的正则表达式支持,并且非常强大和灵活。 使用Python正则表达式,你可以实现各种字符串操作,比如搜索、替换、分割、提取等等。它的语法相对简单,但是功能非常强大,可以满足大部分的字符串处理需求。 在使用Python正则表达式时,你需要掌握一些基本的语法规则,比如元字符、字符集、重复、分组等等。这些语法规则可以组合在一起,形成复杂的匹配模式,以实现更加精细的字符串处理。 总之,Python正则表达式是一种非常有用的工具,可以大大提高字符串处理的效率和精确度。如果你想深入了解它的用法和技巧,可以查看Python官方文档中关于re模块的详细说明。 ### 回答2: Python正则表达式是一种强大的文本匹配和处理工具,通过使用特定的模式来识别和操作文本中的字符串。正则表达式通常被用于从文本中提取特定的信息、验证输入的有效性、进行替换或搜索等操作。 Python正则表达式的语法使用元字符和特殊字符来定义搜索模式,其中元字符用于描述字符类型或位置,特殊字符用于描述重复次数或匹配方式。常见的元字符包括"."(匹配任意字符)、"\d"(匹配数字字符)、"\w"(匹配字母、数字或下划线字符)、"\s"(匹配空白字符)等。特殊字符包括"*"(匹配前面的模式0次或多次)、"+"(匹配前面的模式1次或多次)、"?"(匹配前面的模式0次或1次),以及花括号{}(指定前面模式的重复次数)等。 使用Python正则表达式时,常见的操作包括匹配、搜索、替换和分割。匹配操作通过`re.match()`或`re.search()`函数实现,用于从字符串的起始位置或任意位置开始匹配;搜索操作通过`re.findall()`或`re.finditer()`函数实现,用于在整个字符串中搜索匹配的内容;替换操作通过`re.sub()`函数实现,用于替换匹配到的内容;分割操作通过`re.split()`函数实现,用于按指定的模式分割字符串。 Python正则表达式还支持分组、捕获、非捕获、反向引用等高级特性,可通过使用括号`()`进行分组,并使用`\number`的方式引用分组匹配到的内容。 总而言之,Python正则表达式提供了一套强大且灵活的工具来处理文本匹配和处理的需求。学习和熟练掌握正则表达式的使用,对于处理和分析文本数据将大有裨益。 ### 回答3: Python正则表达式是一种用来匹配字符串模式的工具。它使用一种特殊的语法来描述字符串的模式,然后通过与给定的字符串进行比较,判断是否匹配。 在Python中,我们使用re模块来使用正则表达式。首先,我们需要导入re模块,然后使用re模块提供的函数来进行匹配操作。 正则表达式中的一些基本概念包括: 1. 字符组:用方括号[]表示,表示匹配其中的任意一个字符。例如[abc]表示匹配字符a、b或c。 2. 量词:用来表示匹配多个字符的数量。例如*表示匹配0个或多个字符,+表示匹配1个或多个字符,?表示匹配0个或1个字符。 3. 元字符:具有特殊含义的字符,例如.表示匹配除换行符外的任意字符,\d表示匹配任意一个数字字符。 4. 转义字符:使用反斜杠\来转义元字符。例如\.表示匹配点字符。 5. 边界匹配:^表示匹配字符串的开头,$表示匹配字符串的结尾。 可以通过这些基本概念进行复杂模式的匹配。例如,使用re模块的match函数可以判断一个字符串是否以某个模式开头,使用search函数可以在字符串中搜索匹配某个模式的子串,使用findall函数可以找到所有匹配的子串。 除了基本概念外,Python正则表达式还提供了一些更高级的功能,例如分组、捕获和替换等。 总之,Python正则表达式是一种强大的工具,可以用于字符串的匹配和处理。掌握正则表达式的基本语法和常用函数,可以帮助我们更高效地处理字符串操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值