文章目录
一、什么是正则表达式
通俗理解:
按照一定的规则,从某个字符串中匹配出想要的数据。这个规则就是正则表 达式。
官方参考:正则表达式
二、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'