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


一、什么是正则表达式

通俗理解:

按照一定的规则,从某个字符串中匹配出想要的数据。这个规则就是正则表 达式。

官方参考:正则表达式

二、re模块介绍

re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。注意:

  • re模块是python独有的
  • 正则表达式本质上是对字符串操作的逻辑公式,适用于所有程序语言。
  • re模块使python拥有全部的正则表达式功能

本章节主要介绍Python中常用的正则表达式处理函数。


三、常用正则表(元字符)

模式 描述
\w 匹配字母数字及下划线
\W 匹配 字母数字即下划线
\s 匹配任意 空白字符,等价于 [\t\n\r\f]
\S 匹配任意非空字符
\d 匹配任意数字,等价于 [0-9]
\D 匹配任意非数字
\A 匹配字符串开始
\z 匹配字符串结束
\Z 匹配字符串结束,如果存在换行,只匹配到换行前的结束字符串
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配字符串开头
$ 匹配字符串末尾
. 匹配任意字符,除了换行符,如果当re.DOTALL标记被指定时,则可以匹配包括换行符在内的任意字符
[…] 用来表示一组字符,单独列出:[abc] ,匹配"a",“b"或"c”
[^…] 不在[]中的字符:[ ^abc ] 匹配除了,a,b,c之外的字符
* 匹配0个或者多个的表达式
+ 匹配一个或者多个的表达式
? 匹配0个或者1个由前面的正则表达式定义的片段,非贪婪匹配
{n} 进准匹配n个前面的表达式
{n,m} 匹配n到m次由前面的正则表达式定义的片段,也叫贪婪方式
a|b 匹配a或者b
{} 匹配括号内的表达式,也表示一个组

3.1 \A,\z和^,$的区别

^: 指定匹配必须出现在字符串的开头或行的开头。

\A :指定匹配必须出现在字符串的开头(忽略 Multiline 选项)。

$: 指定匹配必须出现在以下位置:字符串结尾、字符串结尾的 \n 之前或行的结尾。

\Z: 指定匹配必须出现在字符串的结尾或字符串结尾的 \n 之前(忽略 Multiline 选项)。

更多参考正则教程

四、re模块用法示例

'''
re模块基础
Version:01
author:jasn
data:2020-04-16

'''
import re

# ==========================================================================================================================================
# 效果演示
str1 = 'In 2020, I must learn Python! & @'

#  \w:匹配数字字母及下划线
print(re.findall('\w',str1))
# 结果:['I', 'n', '2', '0', '2', '0', 'I', 'm', 'u', 's', 't', 'l', 'e', 'a', 'r', 'n', 'P', 'y', 't', 'h', 'o', 'n']

#  \W:匹配非字母数字及下划线
print(re.findall('\W', str1))
#  结果 :[' ', ',', ' ', ' ', ' ', ' ', '!', ' ', '&', ' ', '@']

#  \s匹配任意空白符
print(re.findall('\s',str1))
#  结果:[' ', ' ', ' ', ' ', ' ', ' ', ' ']

# \S 匹配任意非空字符
print(re.findall('\S', str1))
#  结果:['I', 'n', '2', '0', '2', '0', ',', 'I', 'm', 'u', 's', 't', 'l', 'e', 'a', 'r', 'n', 'P', 'y', 't', 'h', 'o', 'n', '!', '&', '@']

# \d 匹配任意数字,等价于[0-9]
print(re.findall('\d', str1))
print(re.findall('[0-9]', str1))   # 结果相同
# 结果:['2', '0', '2', '0']

# 、\D 匹配任意非数字
print(re.findall('\D', str1))
# 结果 :['I', 'n', ' ', ',', ' ', 'I', ' ', 'm', 'u', 's', 't', ' ', 'l', 'e', 'a', 'r', 'n', ' ', 'P', 'y', 't', 'h', 'o', 'n', '!', ' ', '&', ' ', '@']

# A 匹配字符串的开始 ;\Z匹配字符串的结束,有返回匹配的值,无返回空
print(re.findall('\AIn', str1))  # ['In'],\A  ==>   ^
print(re.findall('@\Z', str1))  # ['@'],\Z  ==>  $

# ^ 匹配字符串的开头;$匹配字符串的结束
print(re.findall('^I', str1))   # ['I']
print(re.findall('@$', str1))   # ['@']

'''
\A,\Z 和 $ ^ 的区别:

^: 指定匹配必须出现在字符串的开头或行的开头。

\A :指定匹配必须出现在字符串的开头(忽略 Multiline 选项)。

$:  指定匹配必须出现在以下位置:字符串结尾、字符串结尾的 \n 之前或行的结尾。

\Z: 指定匹配必须出现在字符串的结尾或字符串结尾的 \n 之前(忽略 Multiline 选项)。
'''

# ===========================================================================================================================================
# 重复匹配:| . | * | ? | .* | .*? | + | {n,m} |
# ===========================================================================================================================================
# . 匹配任意字符,除换行符外

print(re.findall('a.b','a1b'
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值