Python正则表达式和元字符详解


Posted in Python onNovember 29, 2018

正则表达式

正则表达式是一种强大的字符串操作工具。它是一种领域特定语言 (DSL),不管是 Python 还是在大多数现代编程语言中都是作为库存在。

它们主要面向两种任务:

- 验证字符串是否与模式匹配 (例如,字符串具有电子邮件地址的格式)。
- 在字符串中执行替换(例如将所有大写字母改成小写字母)。

特定于领域的语言是高度专业化的迷你编程语言。

正则表达式是一个例子,SQL(用于数据库操作)是另一个例子。

私有领域特定语言通常用于特定的工业目的。

Python 的正则表达式可以使用 re 模块访问,re 模块是标准库的一部分。

当你定义一个正则表达式,可以使用 re.match 函数用于确定是否匹配字符串的开始部分。如果匹配则 match 函数返回表示匹配的对象,如果不匹配则返回 None。

为了避免在处理正则表达式时出现混淆,我们将 r 添加到字符串前缀。该字符串不需要转义任何东西,使得正则表达式的使用变得更容易。

from re import match
msg = r"super"
if match(msg,"superman!"):
 print("You are True")
else:
 print("Occur an error! Foolish...")

运行结果:

>>>
You are True
>>>

上面的例子检查模式 super 是否匹配字符串,如果匹配,则打印 You are True。

这里的模式是一种简单的单词,但是有些字符串,在正则表达式中使用它们时会有特殊的意义。

匹配模式的其他函数有 re.match re.findall

re.match 在字符串中找到匹配。
re.findall 返回一个包含匹配的列表。

import re
string = "Hello python!Hello python!Hello python!"
pattern = r".python."
print(re.match(pattern,string))
print(re.findall(pattern,string))

运行结果:

>>>
None
[' python!', ' python!', ' python!']
>>>

从上面的示例中,我们可以得出:

match() 函数是从内容的第一个字符开始匹配,如果匹配不到,就得到None
findall() 函数从全部内容匹配,如果有多个,找出所有匹配的

函数 re.finditer 执行与 re.findall 相同的操作,但它返回一个迭代器,而不是一个列表。

正则表达式的 search 函数返回一个对象,包含几个更详细的信息。

此方法包括返回字符串匹配的值,返回第一次匹配的开始和结束位置,以及以元组形式返回第一个匹配的开始和结束位置的 span 函数。

import re
string = "Hello python!Hello python!Hello python!"
pattern = r".python."
match = re.search(pattern,string)
if match:
 print(match.group())
 print(match.start())
 print(match.end())
 print(match.span())

运行结果:

>>>
python!
5
13
(5, 13)
>>>

查找和替换

sub 是正则表达式里非常重要的函数。表达式:

re.sub(pattern, repl, string, count=0, flags=0)

pattern:表示正则表达式中的模式字符串;
repl:被替换的字符串(既可以是字符串,也可以是函数);
string:要被处理的,要被替换的字符串;
count:匹配的次数, 默认是全部替换
flags:具体用处不详

import re
string = "Hello python!Hello python!Hello python!"
pattern = r"python"
newstr = re.sub(pattern,"Java",string)
print(newstr)

运行结果:

>>>
Hello Java!Hello Java!Hello Java!
>>>

元字符

元字符使正则表达式比普通字符串方法更强大。它们允许您创建正则表达式来表示诸如一个或多个数字的匹配。
如果要创建与元字符 (如 $) 匹配的正则表达式,元字符的存在就会产生问题。您可以通过在元字符前面添加反斜杠来转义元字符。

但是这可能会导致问题,因为反斜杠在普通 Python 字符串中也有转义函数。这可能意味着可能将三个或四个反斜杠排成一行来执行所有转义操作。

为了避免这种情况,您可以使用一个原始字符串,它是一个普通字符串,前面有一个 "r" 前缀。

元字符点,用来表示匹配除了换行外的任何字符。

import re
string1 = "Hello python!Hello python!Hello python!"
string2 = "pythan,1234587pythoi"
string3 = r"hello"
pattern = r"pyth.n"
match1 = re.search(pattern,string1)
match2 = re.search(pattern,string2)
match3 = re.search(pattern,string3)
if match1:
 print(match1.group())
 print("match 1")
if match2:
 print(match1.group())
 print("match 2")
if match3:
 print(match3.group())
 print("match 3")

运行结果:

>>>
python
match 1
python
match 2
>>>

^ 表示匹配开始,$ 表示匹配结束。

import re
string1="python"
string2="pythan,1234587pythoi"
string3="hello"
pattern=r"^pyth.n$"
match1 = re.search(pattern,string1)
match2 = re.search(pattern,string2)
match3 = re.search(pattern,string3)
if match1:
 print(match1.group())
 print("match 1")
if match2:
 print(match1.group())
 print("match 2")
if match3:
 print(match3.group())
 print("match 3")

运行结果:

>>>
python
match 1
>>>

匹配模式 "^pyth.n$" 意味着字符串应该以 pyth 开头,然后是一个除换行符以外的任何字符,并以 n 结尾。

总结

以上所述是小编给大家介绍的Python正则表达式和元字符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
详细探究Python中的字典容器
Apr 14 Python
使用C语言来扩展Python程序和Zope服务器的教程
Apr 14 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
Python检测QQ在线状态的方法
May 09 Python
Python实现以时间换空间的缓存替换算法
Feb 19 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
python实现年会抽奖程序
Jan 22 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 Python
Django中使用Celery的方法示例
Nov 29 #Python
记一次python 内存泄漏问题及解决过程
Nov 29 #Python
对python pandas 画移动平均线的方法详解
Nov 28 #Python
对pandas中时间窗函数rolling的使用详解
Nov 28 #Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 #Python
使用python对文件中的数值进行累加的实例
Nov 28 #Python
python的concat等多种用法详解
Nov 28 #Python
You might like
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
PHP执行zip与rar解压缩方法实现代码
2010/12/05 PHP
解析PHP 使用curl提交json格式数据
2013/06/29 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
js不是基础的基础
2006/12/24 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
《金钱的魔力》教学反思
2014/02/24 职场文书
商务英语专业求职信
2014/06/26 职场文书
质检员工作总结2015
2015/04/25 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers