Python中的正则表达式
1. 正则表达式语法
在python中使用正则表达式必须首先引入re包import re
.
现在,我们首先创建一个字符串作为搜索目标
要搜索的目标字符串可以存入pattern,然后进行搜索。
matches是finditer()返回的一个包含所有非重叠匹配对象的迭代器。输出搜索结果可以用以下语句:
其中span=(1,4)
表示在目标文本中搜索对象的索引位置。在正则表达式中,可以使用以下字符来代表不同的搜索对象:
以上每个特殊字符仅能匹配一个搜索字符,为了匹配多个,可以重复使用以上字符的组合,l例如,对于text_to_search
中的三个电话号码,我们可以使用pattern=re.compile(r'\d\d\d.\d\d\d.\d\d\d\d')
去匹配,如果只想匹配指定的分隔符,则可以将pattern设置为pattern=re.compile(r'\d\d\d[-.]\d\d\d[-.]\d\d\d\d')
,意为仅匹配使用-或者.分割的电话号码。
也可以同时使用以下表示匹配数量的特殊字符(pattern=re.compile(r'\d+.\d+.\d+')
)或者直接指定出现的数量(pattern=re.compile(r'\d{3}.\d{3}.\d{4}')
或pattern=re.compile(r'\d{3,4}.\d{3,4}.\d{3,4}')
):
当需要匹配多个字符的组合时,可以借用以下特殊符号:
例如,为了匹配text_to_search
中的Mr开头的名字,我们可以将匹配模式设定为:pattern = re.compile(r'Mr.?\s[A-Z]')
,其中?
表示可以有或者没有.
。为了匹配更多选定的称呼前缀,还可以按如下方式定义pattern:
其他的匹配方式还有:
2. 不同的搜索方式对比
re.search() vs. re.match()
Python 提供了两种基于正则表达式的不同原始操作:re.match() 只检查字符串开头的匹配,而 re.search() 则检查字符串中任何地方的匹配。
re.finditer(pattern, string, flags=0)
返回一个迭代器,包含与与re模式(pattern)的所有非重叠的匹配对象。从左到右扫描字符串,并按照找到的顺序返回匹配对象。
re.findall(pattern, string, flags=0)
如果正好有一个组,返回一个与该组相匹配的字符串的列表。如果有多个组,则返回一个与组相匹配的元组列表。与finditer
相比返回值仅为匹配值的列表,不包括位置等信息。
3. 例子
3.1 电子邮件地址的匹配
如果我们有如下的电子邮件地址需要匹配:
则可以将匹配模式定义为:
3.2 网址匹配
如果我们有如下网址需要匹配:
我们可以将匹配模式定义为:
4. 总结
在Python中使用正则表达式需要以下步骤:
- 引入re模块
import re
; - 创建搜索模式pattern
- 利用re.search或者re.finditer()
- 输出搜索结果
-- 本文为[Python Tutorial: re Module - How to Write and Match Regular Expressions (Regex)](Python Tutorial: re Module - How to Write and Match Regular Expressions (Regex) - YouTube笔记
Comments NOTHING