Python正则表达式和元字符详解
正则表达式
正则表达式是一种强大的字符串操作工具。它是一种领域特定语言 (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正则表达式和元字符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
您可能感兴趣的文章
- 01-11正则表达式实现添加、删除、替换三种功能
- 01-11python 用正则表达式筛选文本信息的实例
- 01-11正则表达式之匹配数字范围
- 01-11python爬虫正则表达式之处理换行符
- 01-11正则表达式匹配路由的实现代码
- 01-11正则表达式截取身份证号码加密的方法
- 01-11js正则表达式 匹配两个特定字符间的内容示例
- 01-11MySQL使用正则表达式进行查询操作经典实例总结
- 01-11python正则表达式之对号入座篇
- 01-11详解正则表达式实现二代身份证号码验证
阅读排行
本栏相关
- 01-11正则表达式实现添加、删除、替换三
- 01-11正则表达式之匹配数字范围
- 01-11python 用正则表达式筛选文本信息的实
- 01-11正则表达式匹配路由的实现代码
- 01-11python爬虫正则表达式之处理换行符
- 01-11js正则表达式 匹配两个特定字符间的
- 01-11正则表达式截取身份证号码加密的方
- 01-11python正则表达式之对号入座篇
- 01-11MySQL使用正则表达式进行查询操作经典
- 01-11详解正则表达式实现二代身份证号码
随机阅读
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-10SublimeText编译C开发环境设置
- 01-10C#中split用法实例总结
- 04-02jquery与jsp,用jquery
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-11ajax实现页面的局部加载
- 01-10delphi制作wav文件的方法