初识Python之正则表达篇(完结)

简介: 初识Python之正则表达篇(完结)

正则表达式是一种文本模式,包括普通字符和元字符。正则表达式虽是繁琐的,但它是强大的,而且广泛的应用在Java,c++,PHP,Python,C#等


普通字符


即通过一些普通的重复的字符,进行匹配,例如“王小王”,我们还是使用“王小王”来进行匹配。


非打印字符

注:菜鸟教程re其中常用的的/S用于匹配非空白字符。


特殊字符


所谓的特殊字符,就是一些特殊含义的字符,如“*TXT”中的星号,它就是表示任意字符串的意思。如果要查找文件中带星号的文件,就需要对其进行转义,必须在前面加“\”这个转义符,在其他的元字符也是一样的。


$: 匹配输入字符串的结尾位置

(): 标记一个子表达式开始和结束位置

*: 匹配前面子表达式0次或多次

+: 匹配前面子表达式1次或多次

.: 匹配除换行符之外的任何单字符

[:标记一个中括号表达式的开始

?:匹配前面子表达式0次或1次(非贪婪限定符)

^:匹配输入字符的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合

{:标记限定符表达式的开始

|:指明两项之间的一个选择。

\:这个可以匹配特殊字符,对其进行转义

图解


image.png

常见案例


[0-9]{15,16}表示的是匹配15或16个字符,一般用于信用卡的匹配


其中中括号里面的元素,我们可以理解它为,随机抽取,但是每一个元素都必须要用,而{}里面的元素数据,代表匹配确定的几次或几次。


\d{3}-\d{3}-\d{4}表示电话号码的格式


\w+@\w+.com表示一个以xxx@yyy.com 的电子邮件地址


限定范围


[^aeiou]表示不能匹配到元音字母,所以我们就要记住,在中括号里面以脱字符开始,后面的元素是不可以匹配的。


re模块

image.png



image.pngimage.pngimage.pngimage.png

'''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"))


image.png

'''search()'''
'''
该函数与match一致,如果搜索到成功的匹配,就会返回一个匹配对象,否则就会返回None
'''
print(re.search("www","www.baidu.com").span())
print(re.search("com","www.baidu.com").span())

image.png

image.png


实例操作

'''统计指定文件中函数和变量'''
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("结束了!!!!!")

image.png


初识Python之系列篇章总结


《初识Python之系列篇》总共有16篇文章,每一篇文章都有相应的章节,知识点,系统性的语法架构。从基础字符串再到匹配字符串,全部都是小白作为学习的目标。总的来说,学习Python还是比较好的,它没有Java,c++等其他语言晦涩难懂,注重的是实践,是应用。最后希望大家在学习编程语言的道路上,越走越远,不要只是局限于某一处,要学会融会贯通。


写这些东西并不是为了“商业价值”,来赚取一些利益,我只是想为初学者提供一些帮助,同时也给自己好的回顾,这样再以后查找,也就不需要再茫茫谷歌,百度回旋了。


写了这么多东西,总是感慨良多…


相关文章
|
机器学习/深度学习 数据采集 自然语言处理
【机器学习实战】10分钟学会Python怎么用LASSO回归进行正则化(十二)
【机器学习实战】10分钟学会Python怎么用LASSO回归进行正则化(十二)
2629 0
|
5月前
|
数据采集 存储 JSON
Python 数据抓取教程:完结篇
Python 数据抓取教程:完结篇
56 1
|
7月前
|
Python
python小案例-re正则
python小案例-re正则
|
Rust 自然语言处理 Java
单链表的多语言表达:C++、Java、Python、Go、Rust
单链表是一种链式数据结构,由一个头节点和一些指向下一个节点的指针组成。每个节点包含一个数据元素和指向下一个节点的指针。头节点没有数据,只用于表示链表的开始位置。单链表相对于数组的优点是插入和删除元素时不需要移动其他元素,时间复杂度为O(1)。但是,在查找元素时,单链表比数组要慢,时间复杂度为O(n)。
16659 7
|
7月前
|
机器学习/深度学习 算法 算法框架/工具
【Python机器学习专栏】深度学习中的正则化与优化技术
【4月更文挑战第30天】本文探讨了深度学习中的正则化和优化技术,以提升模型的泛化能力和训练效率。正则化包括L1和L2正则化以及Dropout,防止过拟合。优化技术涵盖梯度下降法、动量法和Adam优化器,加速模型收敛。Python示例展示了如何在Keras中应用这些技术,如L2正则化、Dropout及Adam优化器。
129 0
|
机器学习/深度学习 算法 计算机视觉
线性回归 正则项(惩罚项)原理、正则项的分类与Python代码的实现
线性回归 正则项(惩罚项)原理、正则项的分类与Python代码的实现
|
7月前
|
Python
Python 潮流周刊第一季完结(1~30)
Python 潮流周刊第一季完结(1~30)
53 2
|
7月前
|
存储 开发工具 文件存储
Python的核心知识点整理大全66(已完结撒花)
Python的核心知识点整理大全66(已完结撒花)
127 4
|
Python
6 轻松学python 6-7节 ,python入门完结!
6 轻松学python 6-7节 ,python入门完结!
50 0
|
Python Perl
【python脚本】单行多次正则匹配
【python脚本】单行多次正则匹配