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))
# 返回第二个字串
相关推荐
笨鸟先飞,勤能补拙17 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能18 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂18 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study19 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境19 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境19 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd12319 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy123931021620 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb0020 小时前
一个项目带你入门AI应用开发01
python
05664621 小时前
Python康复训练——常用标准库
开发语言·python·学习