博主前言:
在上学的时候有幸读了一本书,说是一本书,倒不如说是一个小册子。这本册子就是计算机技术大佬Ben Forta编写的《正则表达式必知必会》。这本册子使用简明又实用的例子,让我对正则表达式产生了浓厚的兴趣。在后期的学习中我发现,正则表达式是真的太强大了,特别是在处理复杂旳文本和表单时,正则表达式极大的让原本复杂的编码化成简单的、易懂的字符串。当然,在此之前,你要弄懂以及熟悉正则表达式的相关规则。
1. 什么是正则表达式?
简单地说,正则表达式就是用来处理文本的字符串。 当我们要处理一段文本时,如搜索、匹配、替换等, 首先,我们可以使用正则表达式语言来定一个正确的模板, 然后,用这个模板在文本中去匹配。 在Python语言中,使用正则表达式需要导入re模块。
import re
def main ( ) :
"""选出正确的QQ邮箱"""
datas = [ "tomato@qq.com" , "potato@qq.comcom" , "konat0@163.com" ]
for data in datas:
test = re. match( "[a-zA-z0-9]*@qq\.com$" , data)
if test:
content = test. group( )
print ( content)
if __name__ == '__main__' :
main( )
在上段代码中 [a-zA-z0-9]*@qq\.com$ 就是一串正则表达式。 (如果看不懂,请阅读全篇文章后再回来理解) 使用re模块的match函数可以得到一个符合正则表达式的对象 , 如果没有符合正则表达式的对象,就会返回空 (并不会报错), 所以,博主在学习正则表达式的时候总结了一句话: 没有错误的正则表达式,只有不正确的正则表达式。 运行上段代码,结果如下图所示。
2. 正则表达式规则
2.1 匹配
. 匹配任何一个单个的字符 [] 匹配 [] 中列举的字符 ^ 匹配字符串开头 / 取非匹配 \d 匹配一个数字 \D 匹配一个非数字 \s 匹配空白,即空格键、tab键 \S 匹配非空白 \w 匹配任何一个字母数字字符或下划线(大小写均可) \W 匹配任何一个非字母数字字符或下划线 {n} 匹配 {} 前一个字符出现n次 {m, n} 匹配 {} 前一个字符出现从m次到n次 * 匹配零个或多个字符(可有可无) + 匹配一个或多个字符(至少一个) ? 匹配零个或一个字符 *? *的懒惰型元字符 +? +的懒惰型元字符 {n,}? {}的懒惰型元字符
2.2 空白元字符
\ 转义字符 \f 换页符 \n 换行符 \r 回车符 \t 水平制表符(Tab键) \v 垂直制表符 \b 单词限定符
2.3 子表达式
() 子表达式 | 逻辑或 (?P<name> ) 子表达式取别名 (?P=name) 引用别名为name的子表达式
3. re模块的常用函数
函数名 区别 match 默认从字符串开头开始匹配字符串 search 不会从头匹配,直接找第一个符合正则表达式的字符串 findall 找出所有符合正则表达式要求的字符串
函数名 作用 sub 替换,例 re.sub(“正则表达式”,“A”,“B”),将B中符合正则表达式的字符串替换成A,A处可嵌套函数使用 split 切割,例re.split(“正则表达式”,“A”),将A中所有符合正则表达式的地方切割,返回一个元素列表
注意:
当在字符集合里使用的时候,像 . 和 + 这样的字符将被解释为普通字符,不需要被转义。 \b匹配得是一个位于能够用来构成单词的字符 (字母、数字和下划线,也就是与\w相匹配的字符)和一个不能用来构成单词的字符 (也就是与\W相匹配的字符)之间。 ^ 元字符作用于[]里并紧跟[的后面时,发挥取非匹配的作用。没有作用于[]时,发挥匹配字符串开头的作用。 子表达式()作用于重复匹配,超好用。 “ \r\n ”,操作系统文本结束的标签。 后续补充…
整理码字不易,请读者素质三连以求支持,感谢阅读。