Python进阶(1):正则表达式

正则表达式

正则表达式(Regular Expression,常简写为regex 或者 RE),又称规则表达式,它不是某个编程语言所特有的,是计算机科学的一个概念,通常被用来检索和替换符合某些规则的文本。目前,正则表达式已经在各种计算机语言(如Java、C#和Python 等)中得到了广泛的应用和发展。

行定位符

行定位符就是用来描述字符串的边界。"^"表示行的开始;"$"表示行的结尾。

元字符

限定符

排除字符

匹配不符合指定字符集合的字符串,例如:

\^a-zA-Z

该表达式用于匹配一个不是字母的字符。

转义字符

使用\来进行转义,例如小数点.需要使用\.来转义

分组

使用小括号以及|来进行分组匹配

小括号的第一个作用是改变限定符的作用范围,小括号的第二个作用是分组,匹配多个子表达式

例如(.[0-9]{1,3}){3},就是对分组(.[0-9]{1,3})进行重复操作。

使用re模块实现正则表达式

import re

Python 提供了re 模块,用于实现正则表达式的操作。在实现时,可以使用re模块提供的方法(如 search()、match()、findall()等进行字符串处理,也可以先使用re 模块的 compile()方法将模式字符串转换为正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串。

匹配字符串

match()

match()方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回 Match 对象,否则返回 None。

re.match(pattern,string,[flags])

pattem:表示模式字符串,由要匹配的正则表达式转换而来

string:表示要匹配的字符串

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。如下标记说明:

search()

search()方法用于在整个字符串中搜索第一个匹配的值,如果在起始位置匹配成功,则返回 Match对象,否则返回 None。search()方法不仅仅是在字符串的起始位置搜索,其他位置有符合的匹配也可以。

re.search(pattern,string,[flags])

pattem:表示模式字符串,由要匹配的正则表达式转换而来

string:表示要匹配的字符串

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

findall()

findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,则返回包含匹配结构的列表,否则返回空列表。

strList=re.findall(pattern,string,[flags])

pattem:表示模式字符串,由要匹配的正则表达式转换而来

string:表示要匹配的字符串

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

字符串替换sub()

strNew=re.sub(pattern,replace,srcString,count,flags)

pattem:表示模式字符串,由要匹配的正则表达式转换而来。

replace:表示替换的字符串

srcString:要被查找替换的原始字符串

count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配。

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

使用正则表达式分隔字符串split()

strList=re.split(pattern,srcString,[maxsplit],[flags])

pattem:表示模式字符串,由要匹配的正则表达式转换而来。

srcString:要被分隔的原始字符串

maxsplit:可选参数,表示最大拆分次数。默认值为0,表示全部拆分

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

示例程序:

RegexSnake.py

python 复制代码
import math
import re

print("---------测试数学函数以及格式化---------")
print("格式化为5位小数{0:.5f}".format(math.pi))
print("数字{0:.3f}用科学记数法表示为:{0:E}".format((12345.6789)))
print("整数{:d}的二进制为{:#b},八进制为{:#o},十六进制为{:#x}".format(95,95,95,95))
print("弧度{0:.8f}的正弦值为{1:.8f},余弦值为{2:.8f}".format(math.pi/6,math.sin(math.pi/6),math.cos(math.pi/6)))
print("{0:.5f}的反正弦为弧度{1:.5f},角度为{2:.5f}°,反余弦为弧度{3:.5f}".format(0.70711,math.asin(0.70711),math.asin(0.70711)*180/math.pi,math.acos(0.70711)))
print("----------测试天花板ceil和地板floor函数----------")
num=12.345
print("ceil()函数:{:f}".format(math.ceil(num)))
print("floor()函数:{:f}".format(math.floor(num)))
print("---------Python中的正则表达式match()---------")
pattern=R"snake_\w+"
strInput="Snake_python_CSharp"
matchObject=re.match(pattern,strInput,re.IGNORECASE)
print(matchObject,type(matchObject))
if matchObject:
    print("匹配起始索引:", matchObject.start())
    print("匹配结束索引:", matchObject.end())
    print("匹配元组:", matchObject.span())
    print("匹配数据:", matchObject.group())
    print("打印匹配内容:",matchObject.string)
else:
    print("没有找到匹配内容")
strInput="Hello,Snake_python_C#"
matchObject=re.match(pattern,strInput,re.IGNORECASE)
print(matchObject,type(matchObject))
print("打印匹配内容:","未找到匹配" if matchObject==None else matchObject.string)
print("---------Python中的正则表达式search()---------")
matchObject=re.search(pattern,strInput,re.IGNORECASE)
if matchObject!=None:
    print("匹配起始索引:", matchObject.start())
    print("匹配结束索引:", matchObject.end())
    print("匹配元组:", matchObject.span())
    print("匹配数据:", matchObject.group())
    print("打印匹配内容:",matchObject.string)
else:
    print("没有找到匹配内容")
print("---------Python中的正则表达式findall()---------")
strInput="hello,Snake_python_CSharp.snake_1 and viper"
matchList=re.findall(pattern,strInput,re.IGNORECASE)
print(matchList,type(matchList))
for match in matchList:
    print(match,type(match))
print("---------Python中的正则表达式替换字符串sub()---------")
pattern=r"snake\d{1,5}"
srcString="Snake567ABC,snake2XYZ,snakeXX"
print("原字符串:",srcString)
strNew=re.sub(pattern,"viper**",srcString,0,re.IGNORECASE)
print("替换后为:",strNew)
print("---------Python中的正则表达式分隔字符串split()---------")
srcString="Snake567ABC,snake2XYZ,snakeXX.snakeY;snakeCC"
print("原字符串:",srcString)
pattern=r"[,;\.]"
strList=re.split(pattern,srcString,0,re.IGNORECASE)
print("分隔后的列表为:",strList)

运行如图:

相关推荐
记得多吃点4 分钟前
六、分布式嵌入
分布式·python·torch·推荐算法
小馒头学python19 分钟前
蓝耘元生代AIDC OS:一站式MaaS平台,助力AI应用快速落地
人工智能·python·aigc
梦想画家35 分钟前
PyTorch梯度:深度学习的引擎与实战解析
人工智能·pytorch·python
呆头呆脑~44 分钟前
阿里滑块 231 231纯算 水果滑块 拼图 1688滑块 某宝 大麦滑块 阿里231 验证码
javascript·爬虫·python·网络爬虫·wasm
Thanks_ks3 小时前
利用 Python 进行股票数据可视化分析
python·matplotlib·热力图·seaborn·可视化分析·股票数据·yfinance
pzx_0013 小时前
【深度学习】自定义实现DataSet和DataLoader
开发语言·人工智能·python·深度学习·算法
起个破名想半天了9 小时前
Sklearn入门之datasets的基本用法
人工智能·python·机器学习·sklearn
大雄野比9 小时前
【scikit-learn基础】--『预处理』之 缺失值处理
python·机器学习·scikit-learn
小鑫仔_x10 小时前
selenium之Token
python·selenium·测试工具
神仙别闹10 小时前
基于Python(Django)+SQLite 实现(Web) 点菜管理系统
python·django·sqlite