当前位置:首页>python>Python基础——Python与正则表达式

Python基础——Python与正则表达式

  • 2026-08-25 19:56:16
Python基础——Python与正则表达式
大家好,我是Raines。
每天一个数据小知识,今天的主题是【Python与正则表达式】
一、模块导入:
在 Python 中使用正则表达式主要通过re模块来实现
import re
二、常用方法:
1.re.match()
从字符串开头匹配模式
语法:
re.match(pattern, string, flags=0)
参数说明:
    • pattern:匹配的正则表达
    • string:要匹配的字符串
    • flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等
匹配成功返回第一个匹配的对象,否则返回None
示例:
result = re.match(r'hello', 'hello world')if result:    print("匹配成功:", result.group())  # hello
匹配成功可以用group()或者groups()获取匹配表达式,方法说明:
  • group(num=0):匹配整个表达式的字符串,默认返回第一个,若输入多个组号,将返回包含那些组对应值的元组
  • groups():返回一个包含所有小组字符串的元组
2.re.rearch()
扫描整个字符串,返回第一个匹配
语法:
re.rearch(pattern, string, flags=0)
参数同re.match(),匹配成功返回第一个匹配的对象,否则返回None
示例:
result = re.search(r'\d+', 'abc 123 def 456')    print("找到数字:", result.group())  # 123
语法一模一样的两者有什么区别吗?
re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None,而 re.search 匹配整个字符串,直到找到一个匹配。
举个例子来看:
line = "Cats are smarter than dogs"matchObj = re.match( r'dogs', line, re.M|re.I)if matchObj:   print ("match --> matchObj.group() : ", matchObj.group())else:   print ("No match!!")matchObj = re.search( r'dogs', line, re.M|re.I)if matchObj:   print ("search --> matchObj.group() : ", matchObj.group())else:   print ("No match!!")
结果返回为:
No match!!search --> matchObj.group() :  dogs
3.re.compile()
编译正则表达式,生成一个正则表达式对象(Pattern),供match()和search()函数调用
语法:
re.compile(pattern[, flags])
示例:
pattern = re.compile(r'\d+')              m = pattern.match('11one12twothree34four')print(m)# 11
4.re.findall()
返回所有匹配的字符串列表
语法:
re.findall(pattern, string, flags=0)或pattern.findall(string[, pos[, endpos]])
参数说明:
    • pattern:匹配模式
    • string:待匹配字符串
    • pos:指定字符串的起始位置,默认为0
    • endpos:指定字符串的结束位置,默认为字符串的长度
示例:
numbers = re.findall(r'\d+', 'abc 123 def 456')print(numbers)  # ['123', '456']
5.re.finditer():
返回所有匹配的迭代器
语法:
re.finditer(pattern, string, flags=0)
参数同上
for match in re.finditer(r'\d+', 'abc 123 def 456'):    print(match.group(), match.span())
6.re.sub():
替换匹配的字符串
语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数说明:
    • pattern:(必选)匹配的正则表达式
    • rel:(必选)替换的字符串,也可为一个函数
    • string:(必选)要被查找替换的原始字符串
    • count:(可选)模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
    • flags:(可选)编译时用的匹配模式
示例:
text = "Python 2.7, Python 3.8"new_text = re.sub(r'\d\.\d', 'X.X', text)print(new_text)  # Python X.X, Python X.X
7.re.split():
使用正则表达式分割字符串
语法:
re.split(pattern, string[, maxsplit=0, flags=0])
参数说明:
    • pattern:(必选)匹配的正则表达式
    • string:要匹配的字符串
    • maxsplit:分割次数,maxsplit=1分割一次,默认为0不限制次数
    • flags:标志位
示例:
parts = re.split(r'\s+', 'hello   world\tPython')print(parts)  # ['hello', 'world', 'Python']
三、正则表达式修饰符:
也就是上面参数中的flags。
用一些可选标志修饰符来控制匹配的模式,标志可以单独使用,也可以通过按位或(|)组合使用。例如,re.IGNORECASE | re.MULTILINE 表示同时启用忽略大小写和多行模式
四、贪婪匹配与非贪婪匹配:
1.贪婪匹配:
匹配尽可能多的字符,直到无法匹配为止
常见量词:*、+、?、{n,}、{n,m}
2.非贪婪匹配:
匹配尽可能少的字符,一旦满足条件就停止匹配
常见量词:上述量词后面都加?(匹配0次或1次)
示例:
text = "<div>content1</div><div>content2</div>"# 贪婪匹配 (默认)greedy = re.findall(r'<div>.*</div>', text)print("贪婪匹配:", greedy)  # 输出: ['<div>content1</div><div>content2</div>']# 非贪婪匹配non_greedy = re.findall(r'<div>.*?</div>', text)print("非贪婪匹配:", non_greedy)  # 输出: ['<div>content1</div>', '<div>content2</div>']
五、汇总
上期答案:

有以下文本,请设计正则表达式,分别提取订单号、金额(纯数字)和客户名

订单号: OD20240115001, 金额: ¥1,234.56, 客户: 张三订单号: OD20240116002, 金额: ¥890.00, 客户: 李四
订单号:\s*([^,]+),\s*金额:\s*¥([\d,.]+),\s*客户:\s*([\u4e00-\u9fa5]+)
如果想一起学习数据分析相关知识,一起交流的朋友,欢迎加我微信,备注【数之真理】,9.9元解锁每日数据小知识分享,全网新手最友好!干货最充足!氛围最好的数据分析分享群等你加入!
群聊福利包含但不限于:
1.思维导图源文件分享
2.Excel公式分享
3.群内互动及问题解答
更多高能福利持续解锁中,福利多多,千万不要错过!!
1对1数据咨询开放中,欢迎加V预约咨询,首次咨询享超值优惠

最新文章

随机文章