正则表达式是一种文本模式,包括普通字符和元字符。正则表达式虽是繁琐的,但它是强大的,而且广泛的应用在Java,c++,PHP,Python,C#等
普通字符
即通过一些普通的重复的字符,进行匹配,例如“王小王”,我们还是使用“王小王”来进行匹配。
非打印字符
注:菜鸟教程re其中常用的的/S用于匹配非空白字符。
特殊字符
所谓的特殊字符,就是一些特殊含义的字符,如“*TXT”中的星号,它就是表示任意字符串的意思。如果要查找文件中带星号的文件,就需要对其进行转义,必须在前面加“\”这个转义符,在其他的元字符也是一样的。
$: 匹配输入字符串的结尾位置
(): 标记一个子表达式开始和结束位置
*: 匹配前面子表达式0次或多次
+: 匹配前面子表达式1次或多次
.: 匹配除换行符之外的任何单字符
[:标记一个中括号表达式的开始
?:匹配前面子表达式0次或1次(非贪婪限定符)
^:匹配输入字符的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合
{:标记限定符表达式的开始
|:指明两项之间的一个选择。
\:这个可以匹配特殊字符,对其进行转义
图解
常见案例
[0-9]{15,16}表示的是匹配15或16个字符,一般用于信用卡的匹配
其中中括号里面的元素,我们可以理解它为,随机抽取,但是每一个元素都必须要用,而{}里面的元素数据,代表匹配确定的几次或几次。
\d{3}-\d{3}-\d{4}表示电话号码的格式
\w+@\w+.com表示一个以xxx@yyy.com 的电子邮件地址
限定范围
[^aeiou]表示不能匹配到元音字母,所以我们就要记住,在中括号里面以脱字符开始,后面的元素是不可以匹配的。
re模块
'''compile()''' ''' compile(字符串,代码文件名称,指定编译代码的种类:exec,eval,single.) ''' '''match()''' ''' re.match(pattern,string,flags) pattern:匹配的正则表达式 string:要匹配的字符 flags:标志符,例如re.S re.X ''' import re print(re.match("w{3}","www.baidu.com").span()) print(re.match("com","www.baidu.com"))
'''search()''' ''' 该函数与match一致,如果搜索到成功的匹配,就会返回一个匹配对象,否则就会返回None ''' print(re.search("www","www.baidu.com").span()) print(re.search("com","www.baidu.com").span())
实例操作
'''统计指定文件中函数和变量''' import re import sys def tongjiFunc(s): r=re.compile(r""" (?<=def\s) \w+ \(.*?\) (?=:) """,re.X |re.U) return r.findall(s) def tongjiVar(s): vars=[] r=re.compile(r""" \b \w+ (?=\s=) """,re.X|re.U) vars.extend(r.findall(s)) re.compile(r""" (?<=for\s) \w+ \s (?=in)""",re.X|re.U) vars.extend(r.findall(s)) return vars if len(sys.argv)==1: sour=input("亲输入你的文件路径:") else: sour=sys.argv[1] file=open(sour,encoding="utf-8") s=file.readlines() file.close() print("不要着急!慢慢的......") print("文件",sour,"中存在的函数有:") print("*********************************") i=0 for line in s: i+=1 function=tongjiFunc(line) if len(function)==1: print("line:",i,"\t",function[0]) print("**********************************") print("文件",sour,"中存在变量有:") print("******************************") i=0 for line in s: i+=1 var=tongjiVar(line) if len(var)==1: print("line",i,"\t",var[0]) print("结束了!!!!!")
初识Python之系列篇章总结
《初识Python之系列篇》总共有16篇文章,每一篇文章都有相应的章节,知识点,系统性的语法架构。从基础字符串再到匹配字符串,全部都是小白作为学习的目标。总的来说,学习Python还是比较好的,它没有Java,c++等其他语言晦涩难懂,注重的是实践,是应用。最后希望大家在学习编程语言的道路上,越走越远,不要只是局限于某一处,要学会融会贯通。
写这些东西并不是为了“商业价值”,来赚取一些利益,我只是想为初学者提供一些帮助,同时也给自己好的回顾,这样再以后查找,也就不需要再茫茫谷歌,百度回旋了。
写了这么多东西,总是感慨良多…