首先,正则表达式用来干什么?(python需要导入re模块)
1.判断一个字符串是否匹配给定的格式
2.从字符串中按指定格式提取内容
举一个筛选邮箱的栗子
# coding=utf-8
import re
# r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.com$'
email = '12456789@qq.com'
mymail = re.findall(r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.com$',email)
print(mymail)
第一步就是导入我们的re模块
r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.com$'
是正则表达式语法,也就是规则,在re的findall方法中,第一个参数代表正则表达式语法,也就是规则,第二个参数代表你要判断的字符串,运行得到结果就是我们的email字符串,是匹配成功的
findall是re模块中最常用的方法re.findall(pattern,string),具体内容上一段也提到过,那么如何理解正则表达式语句的内容呢,下面通过栗子一步一步讲解
再来一个栗子,在写正则时候先写好如下语句,以免遗漏
import re
mystr = '兜兜转转,人生中的第一份工作又是和C打交道,虽说是Linux下C,不在是单片机上的C语言了。。。 回顾过往,最开始接触的就是单片机,当时c和汇编用的很顺手,感觉特舒服,后来接触32位单片机,那时候直接用的别人写好的库,没去仔细研究,打那以后,感觉自己像在田野里玩耍的孩子,遍地野花,各种新鲜东西充...'
myNewStr = re.findall(r'', mystr)
mystr可以随意写,加入r''的意义读者自行研究转义字符方面
下面在‘’中写入"C"并输出
myNewStr = re.findall(r'C', mystr)
print(myNewStr)
为了理解''里面要写内容的含义,映入一个概念,元字符
1.通配符
一个一个栗子的来说明
1.符号“.”(英文点)
myNewStr = re.findall(r'C.', mystr)
print(myNewStr)
再看到输出结果,很容易能理解,“.”就是代表任意一个字符,可以加多个点代表多个任意字符,如果想匹配符号“.”请改为“\.”转义
2.字符[]
在里面随意加入一些数字,然后输入
myNewStr = re.findall(r'[0-9]', mystr)
结果如下,照样很容易理解“[]”代表索引数字,“[0]”代表找到数字为0的地方,“[0-5]”代表找到数字为0-5的地方
锚点元字符
符号“^ $”叫做锚点元字符
用来定义开头结尾,举一个栗子
myNewStr = re.findall(r'^C', mystr)
匹配失败,原因是托字符“^”代表仅从开头查找,若没有就停止查找“$”意思是被匹配的内容是否以要求所结尾
栗子如下,在myNewStr末尾加入数字123
myNewStr = re.findall(r'123$', mystr)
结果显然,匹配成功
单词边界(不属于元字符“\b”)
栗子如下
# coding=utf-8
import re
mystr = 'hello world python adshello aaa'
myNewStr = re.findall(r'hello', mystr)
print(myNewStr)
myNewStr = re.findall(r'\bhello\b', mystr)
print(myNewStr)
结果很简单就能理解吧,开始和结束定界一个字符,单独在一个位置加仅代表从前面符合要求规范或者从后开始符合单词规范,这就是单词边界
控制次数“{}”
栗子来了
# coding=utf-8
import re
mystr = 'hello world python addddddddddshello aaa'
myNewStr = re.findall(r'adddddddddd', mystr)
print(myNewStr)
myNewStr = re.findall(r'ad{10}', mystr)
print(myNewStr)
myNewStr = re.findall(r'ad{3,15}', mystr)
print(myNewStr)
(第三行结果一样)
用途显而易见,用于少写代码(罒ω罒),里面如果带“,”则意味着一个区间,即提取d重复再3-14(后不包)个,也可以写成{3,}{,9},都是区间
符号“*”
* 代表任意多个字符,用于修饰前面的字符的,他等同于{0, },如果没有这个字符也可以匹配到,因为他的区间是[0, +99999999)
符号“+”
+代表至少有一个,同*,只不过区间变成了[1,+99999999)
符号“?”
?表示为0个或者1个字符,匹配区间为[0, 1],大于1个就匹配不到