Python正则表达式和元字符详解
作者:清洁工老板 发布时间:2021-02-26 02:54:19
正则表达式
正则表达式是一种强大的字符串操作工具。它是一种领域特定语言 (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正则表达式和元字符网站的支持!
来源:http://www.cnblogs.com/dustman/p/10027947.html


猜你喜欢
- 武器档案名称:firebug最新版本:1.7用途:前端调试器必备指数:使用难度:firebug是前端最具盛名的调试器,功能非常强悍。fire
- 说明: a、以下字符中数据库名forum,数据库服务器名WWW-2443D34E558\SQL2005(或者127.0.0.1) b、查看s
- 打开VB6,新建ActiveX DLL 2、在工程引用中加入Microsoft Active Server Pages Object Lib
- 前 言:作为当前先进的深度学习目标检测算法YOLOv5,已经集合了大量的trick,但是在处理一些复杂背景问题的时候,还是容易出现错漏检的问
- 如下所示:def prn_obj(obj): print '\n'.join(['%s:%s'
- 数据结构树简介一、树简介树(Tree)是一种抽象的数据结构,是一个数据的集合,集合中的数据组成了一个树状结构。例如上图,看起来像一棵倒挂的树
- 本文实例讲述了JS 事件机制。分享给大家供大家参考,具体如下:<html> <head>
- 一、知识介绍:1、input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型;2、可以用作文本输入,如用户名,密码框的
- Step 1:Creating a Linked Server. EXEC sp_addlinkedserver 'ADSI'
- Kubernetes的控制器模式是其非常重要的一个设计模式,整个Kubernetes定义的资源对象以及其状态都保存在etcd数据库中,通过a
- ??本文核心:setup()概念、 reactive()的使用【前言】vue3作为vue2的升级版,有着很多的新特性,其中就包括了组合式AP
- 编写函数装饰器本节主要介绍编写函数装饰器的相关内容。跟踪调用如下代码定义并应用一个函数装饰器,来统计对装饰的函数的调用次数,并且针对每一次调
- 本文实例讲述了python对象及面向对象技术。分享给大家供大家参考,具体如下:1 先看一个例子. 本章将讲解这个例子程序:文件: filei
- 本文分享的实例主要实现的是Python+matplotlib绘制一个有阴影和没有阴影的3D条形图,具体如下。首先看看演示效果:完整代码如下:
- 1、效果图2、操作步骤File->Setting->Editor->File and TemplateIncludes/*
- 本文实例讲述了PHP实现的服务器一致性hash分布算法。分享给大家供大家参考,具体如下:<?php/** * 对服务器进行一致性has
- 前言估计最近很火的连续剧《隐秘的角落》大家趁着端午假期都看过了吧?小编也跟着潮流,一口气把12集的连续剧全部看完了。看过的人肯定对朋友圈里有
- CTE(Common Table Expressions)是从SQL Server 2005以后版本才有的。指定的临时命名结果集,这些结果集
- 从百度查到在django中,使用post方法时,需要先生成随机码,以防止CSRF(Cross-site request forgery)跨站
- 当Python中用到双重for循环设计的时候我一般会使用循环的嵌套,但是在Python中其实还存在另一种技巧——for复合语句。简单写一个小