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 相关文章推荐
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
Python实现端口检测的方法
Jul 24 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
python 中的列表生成式、生成器表达式、模块导入
Jun 19 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
Python绘图实现显示中文
Dec 04 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
Python openpyxl模块实现excel读写操作
Jun 30 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
Python pymongo模块常用操作分析
2018/09/01 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
详解python:time模块用法
2019/03/25 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
python迭代器常见用法实例分析
2019/11/22 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
python适合做数据挖掘吗
2020/06/16 Python
python中pivot()函数基础知识点
2021/01/03 Python
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
什么是servlet链?
2014/07/13 面试题
电大自我鉴定
2013/10/27 职场文书
职业生涯规划书的格式
2013/12/29 职场文书
通用自荐信范文
2014/03/14 职场文书
赡养老人协议书
2014/04/21 职场文书
爱心捐书活动总结
2014/07/05 职场文书
员工手册编写范本
2015/05/14 职场文书
谢师宴学生致辞
2015/07/27 职场文书
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
使用CSS设置滚动条样式
2022/01/18 HTML / CSS
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers