python re 模块 正则表达式

一、正则表达式基本符号

^ 表示匹配字符串的开始位置 (例外 用在中括号中 时,可以理解为取反,表示不匹配括号中字符串)
$ 表示匹配字符串的结束位置
* 表示匹配 零次到多次(记忆方法:符号是星星,天上的星星可以是无数个也可以看不到)

  • 表示匹配 一次到多次 (记忆方法:符号是加号,增加的意思,至少得有一个)
    ? 表示匹配零次或一次(记忆方法:符号是问号,那就是有或者没有,两种可能)
    . 表示匹配单个字符
    | 表示为或者,两项中取一项
    () 小括号表示匹配括号中全部字符
    \[\] 中括号表示匹配括号中一个字符 范围描述 如0-9 a-z A-Z
    {} 大括号用于限定匹配次数 如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符 {n,m}表示至少n,最多m
    \ 转义字符 如上基本符号匹配都需要转义字符 如 \* 表示匹配 * 号、\w 表示英文字母和数字、\W 非字母和数字、\d 表示数字、 \D 非数字、 \s 匹配任何空白字符

更多更详细介绍:点我查看更多正在表达式介绍

常用的正则表达式:

bash 复制代码
常用的正则表达式

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
sql语句:^(select|drop|delete|create|update|insert).*$

二、re 模块,函数介绍

2.1 re.compile

该函数将创建一个正则表达式的对象,可以实现更有效率的复用。

python 复制代码
import re
find_xx = re.compile('正则表达式', 修饰符)

2.2 re.findall

该函数将会搜索所有满足条件的字符串

python 复制代码
import re
r = re.findall('正则表达式', 文本内容, 修饰符)

返回值会因为正则表达式的小括号不同而不同 共计三种情况

2.2.1 当给出的正则表达式不带括号的时候,列表的元素为字符串,此时字符串为整个正则表达式匹配的内容。

python 复制代码
import re
     
text = '2018年的下半年,9月份, 27日'
pattern = re.compile(r'\d{4}年|\d{1}月|\d{2}日')
res = pattern.findall(text)
print(res)
# 输出结果: ['2018年', '9月', '27日']

2.2.2 正则表达式中只有一个括号,列表元素为字符串时,则内容和括号中的正则表达式对应

python 复制代码
import re
text = '2018年的下半年,9月份, 27日'
pattern = re.compile(r'\d+(年|月|日|)')
res = pattern.findall(text)
print(res)
# 输出结果: ['年', '月', '日']

2.2.3 如果正则表达式中有多个括号时,列表的元素为多个字符组合成的元组,元组中的字符串格式与括号数对应,内容与正则表达式顺序对应。

python 复制代码
import re
     
test = '2018年的下半年, 9月份, 27日'
pattern = re.compile(r'(\d)+(年|月|日)')
res = pattern.findall(test)
print(res)
     
# 输出结果为:[('8','年'),('9','月'),('7','日')]

如果不希望按小括号分组,可以在小括号开头输入 ?: ,输出结果与 2.2.1 一致

python 复制代码
import re
     
test = '2018年的下半年, 9月份, 27日'
pattern = re.compile(r'(\d)+(年|月|日)')
res = pattern.findall(test)
print(res)
     
# 输出结果为:['2018年', '9月', '27日']

2.3 re.finditer

搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是 match 对象,相比 re.findall 它可以获取匹配的位置

python 复制代码
import re

# 编译正则表达式对象
pattern = re.compile(r'ab.*c')

# 在字符串中查找匹配正则表达式的内容
text = 'abcfabcgabch'
matches = pattern.finditer(text)

# 遍历所有匹配
for match in matches:
    start_pos = match.start()
    end_pos = match.end()
    match_str = match.group()
    print('Match found:', match_str)
    print('Start position:', start_pos)
    print('End position:', end_pos)

2.4 re.search

搜索第一个满足条件的字符串,查找到第一个停止

python 复制代码
import re
find_xx = re.compile('正则表达式', '修饰符')
res = re.search(find_xx, text)

2.5 re.sub

替换所有满足条件的字符串

python 复制代码
import re
text = 'hello 123 world 456'
replacedStr = re.sub("\d+","222",text)
print(replacedStr)
# 返回'hello 222 world 222'

2.6 re.split

匹配分割string maxsplit是允许被分割成几个子串,默认是0最大化字串,如果是1则是从原本字符串中切出一个字串,其他字串整串返回。

python 复制代码
import re
a = re.split('正则表达式', '文本', [maxsplit=0])
print(a)

2.7 group(group1,....)

返回一个或者多个子组,更详细介绍:点我查看

python 复制代码
import re
m = re.search('正则表达式','文本')
print(m.group(2))
# 返回第二个字串
相关推荐
circuitsosk13 分钟前
Python 模块与包管理:import 机制、虚拟环境与 pip 完全指南
开发语言·python·pip·依赖管理·模块与包
weixin_4407305032 分钟前
python+request实现接口-小结
开发语言·python
zlinear数据采集卡1 小时前
数据采集卡从入门到精通(38):上位机开发实战——Python/QT/LabVIEW的技术选型与分层架构
python·单片机·嵌入式硬件·qt·fpga开发·开源·labview
for_ever_love__1 小时前
PySpark学习: 数据输出
开发语言·python·学习·spark
张人玉1 小时前
基于 Python 的桌面端智能识别与可视化系统——生活垃圾分类可视化大屏
python·分类·sqlite·echarts·生活
何以解忧,唯有..2 小时前
Python os模块详解:文件与目录操作指南
java·服务器·python
言乐62 小时前
Python实现自动拉人脚本示例
开发语言·windows·python·django·pygame
归去来 兮2 小时前
Python爬虫爬取数据案例
开发语言·爬虫·python
何以解忧,唯有..2 小时前
Python logging 模块:从入门到精通
python·microsoft·php