python 之正则匹配

使用Python内置的re模块 import re
1、常用的匹配规则

一、普通字符
.  匹配除换行符"\n"外的字符   a.c ==> abc、amc
\  转义字符,使后一个字符改变原来的意思  a\.c  ==> a.c    a\\c ==> a\c
*  匹配前一个字符0次或多次            abc*  ===>  ab、 abc、 abccc
+  匹配前一个字符1次或无限次    (比* 更为严格,属于 * 的子集) abc+ ==> abc、 abcccc
? 匹配一个字符0次或1次               abc? ==> ab、 abc
^  匹配字符串开头。在多行模式中匹配每一行的开头
$  匹配字符串末尾,在多行模式中匹配每一行的末尾
{} {m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次  eg: \d{11} ==> 13311907472
() 分组表达式作为一个整体
================================================================================
二、预定义字符集
\d  数字 0-9    eg:a\dc  ==> a1c 、 a9c
\D  非数字      eg:a\Dc  ==> abc
\s  任何空白字符 eg:a\sc ==> a c
\S  非空白字符   eg: a\Sc ==> abc
\w  含下划线在内的任何字符  a\wc ==> a_c
\W  匹配非字母字符,即匹配特殊字符 a\Wc ==> a&c

2、re.match函数: 尝试从字符串的起始位置匹配一个字符串,如果不是起始位置匹配成功的话,match()就返回None

re.match(pattern, string, flag=0)

 1.pattern 要匹配的正则表达式
 2.要匹配的字符串儿
 3.标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等。

返回值:匹配成功 re.match方法返回一个匹配的对象,否则返回None
#group 函数 group() 返回re整体匹配的字符串。
#re.match()只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
#re.search()匹配整个字符串,直到找到一个匹配
#re.findall()遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。

说明: flag :re.I 是匹配对大小写不敏感

3、实战练习,模糊匹配身份证号、邮箱地址

#a、匹配一个网址
r_web = r'[a-zA-Z]*://[^\s]*'
test_string = 'Its after 12 noon, do you know where your rooftops are? https://www.baidu.com'
url = re.search(r_web, test_string).group()
print(url)

#b、匹配一个身份证号码
# 第一位表示 [1-6]
# 第2-6位 表示[0-9]{5} 或者\d{5}
# 第7位:年份第一位   [12]   1993 或者 2008
# 第8,9,10位: 年份后三位  [0-9]{3} 或者\d{3}
# 第11,12位 月份 (0[1-9]|1[12])
# 第13,14位 日   (0[1-9]|1[0-9]|2[0-9]|3[01])
# 第15,16,17位校验码 [0-9]{3} 或者\d{3}
# 第18位 校验码 [0-9]|X|x或 (\d|X|x)

r = r'^[1-6]\d{5}[12]\d{3}(0[1-9]|1[12])(0[1-9]|1[0-9]|2[0-9]|3[01])\d{3}(\d|X|x)$'

idNumber = re.match(r, '41232519950612123X').group()

print(idNumber)

#c、匹配一个邮箱 [email protected][email protected][email protected]
#在findall中存在括号会返回元组
# xxx 包含下划线在内的所有字符\s{0,19}
# yyy 字母跟数字{1,13}
# com、cn、net  [com,cn,net]
r_mail = r'\S{3,19}@[0-9A-Za-z]{1,13}\.[com,cn,net]{1,3}'
r_mail = r'[^\s]{3,19}@[0-9A-Za-z]{1,13}\.[com,cn,net]{1,3}'


email = re.search(r_mail,'[email protected]').group()
print(email)

实际结果:


result.png

你可能感兴趣的:(python 之正则匹配)