今天学习正则表达式,用于查找匹配
什么是正则表达式?
正则表达式(regex)又是规则表达式,正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,例如word中的查找与替换,正则表达式是对字符串操作的一种逻辑公式,利用特定字符的组合,组成规则的类似字符串。例如, \d 是一个正则表达式, 表示一位数字字符,即任何一位 0 到 9 的数字。
如果你想要知道打来的电话是否是你需要的电话号码,你可能不是很清楚全部的电话号码,只知道部分号码,(比如号码有415-555-4242,或者(415) 555-4242等不同的电话格式)那么怎么通过正则表达式去判断
-
1.用正则表达式查找文本模式
415-555-4242如果用正则表达模式可以表达为\d\d\d-\d\d\d-\d\d\d\d,或者加上{ }表示次数,可以表达为\d{3}-\d{3}-\d{4},从而匹配正确电话格式
1.1正则表达式的函数模块re,利用re模块创建正则表达式,利用re.compile返回对象到Regex,即phoneNumRegex中包含一个Regex对象
import re
phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
1.2匹配Regex,利用 search()方法查找传入的字符串, 寻找该正则表达式的所有匹配。如果没有找到该正则表达模式的就返回None,如果找到该正则表达模式,利用group()则返回实际匹配对象。
phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
mo=phoneNumRegex.search('My number is 415-555-4242.')
print('Phone number found: ' + mo.group())
-
2.匹配文本
如果想要把(415) 555-4242该电话的区号分开,则需要在正则表达式中添加括号,创建分组,然后用group()匹配对象。
2.1如果想要筛选匹配的对象有括号,可以用\进行转义
2.2利用管道命令 |进行分组,相当于或的意思
指定相同的字符,如白色白天白雪都有白,则正则表达式为:
2.3使用?可以选择可选匹配
2.4使用*可实现匹配零次或者多次,而+则是实现匹配一次或者多次
-
3.使用findall()寻找匹配对象,相当于search()
其中,如果匹配的是没有分组的正则表达式,那么返回的为列表,如果有分组则返回的为元组