python re模块学习(一)

正则概念

就其本质而言,正则表达式(或re)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过re模块实现。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行

初入正则,re.findall()与元字符

# findall(): 去字符串中把我所有匹配到的结果,以列表形式列出

r = re.findall(‘alex‘,‘xxfsafasdf$alexxxxalex‘)
#                     |                 |
#                 匹配规则    需要匹配结果的字符串
print(r)

==> [‘alex‘, ‘alex‘]  

# 以上我们使用的是普通字符做规则去匹配字符串,
# 而正则就是要更灵活的匹配字符串,所以,这里要引出一个概念:

# 原字符

# .  (小数点)
# 匹配除换行符以外的任何一个字符
>>> re.findall(‘al.x‘,‘xxfsafasdf$alexxxxalwx‘)
[‘alex‘, ‘alwx‘]

# ^ (以什么开头)
# $ (结尾符)
>>> re.findall(‘^al.x‘,‘alexxxfsafasdfalexxxxalwx‘)
[‘alex‘]  # 仅匹配到开头的alex

>>> re.findall(‘al.x$‘,‘alexxxfsafasdfalexxxxalwx‘)
[‘alwx‘] # 匹配字符串到结尾

# * (0-多次重复)
>>> re.findall(‘alex*‘,‘alexxxfsafasdfalexxxxale‘)
[‘alexxx‘, ‘alexxxx‘, ‘ale‘]  # 匹配到0-多次重复的x

# .* (1-多个任意字符)
>>> re.findall(‘f.*fale‘,‘alexxxfsafasdfalexxxxalwx‘)
[‘fsafasdfale‘] 

# + (1-多次重复)
>>> re.findall(‘alex+‘,‘alexxxfsafasdf$alexxxxale‘)
[‘alexxx‘, ‘alexxxx‘]

# .+ (2-多个任意字符)
>>> re.findall(‘alex+‘,‘alex‘)
[‘alex‘]
>>> re.findall(‘alex.+‘,‘alex‘)
[]

# .? (匹配0或1此重复)
>>> re.findall(‘ale.?‘,‘alex‘)
[‘alex‘]
>>> re.findall(‘ale.?‘,‘ale‘)
[‘ale‘]

# {} (匹配范围)
>>> re.findall(‘ale{2}x‘,‘alexaleex‘) # 匹配2次重复
[‘aleex‘]
>>> re.findall(‘ale{2,3}x‘,‘alexaleexaleeex‘) # 匹配2到3次重复
[‘aleex‘, ‘aleeex‘]
>>> re.findall(‘ale.{2,7}x‘,‘alexaleexaleeexalesddsx‘) # 同样适用.{}匹配任意字符
[‘alexaleex‘, ‘aleeex‘, ‘alesddsx‘]
#    [bc]     匹配b或c
>>> re.findall(‘a[bc]c‘,‘abcacc‘)
[‘abc‘, ‘acc‘]

#    [a-z]    范围匹配,a-z任意一个字母 [1-9]  匹配1-9任意一个数字
>>> re.findall(‘a[a-z]c‘,‘abcacc26862‘)
[‘abc‘, ‘acc‘]
>>> re.findall(‘[1-9]‘,‘abcacc26862‘) # 取到了每一个数字
[‘2‘, ‘6‘, ‘8‘, ‘6‘, ‘2‘]

#    [a*]     匹配a或*(*在中括号中无意义)
>>> re.findall(‘a[b*]c‘,‘abca*c‘)
[‘abc‘, ‘a*c‘]

#    [^f]     取反,不包含f匹配
>>> re.findall(‘a[^f]c‘,‘abca*c‘)
[‘abc‘, ‘a*c‘]

正则之反斜杠使用

# 反斜杠后边跟元字符去除特殊功能
# 反斜杠后边跟普通字符实现特殊功能

\d   匹配到任何十进制数;它相当于[0-9]
\D  匹配任何非数字字符;它相当于[^0-9]
\s   匹配任何空白字符;它相当于[ \t\n\r\f\v]  注意第一个字符为空格
\S  匹配任何非空白字符;它相当于[^ \t\n\r\f\v] 注意第二个字符为空格
\w  匹配任何字母数字字符;它相当于[a-zA-Z0-9_]  注意包含下划线
\W  匹配任何非字母数字字符;它相当于[^a-zA-Z0-9_]  注意包含下划线
\b  匹配一个单词的边界,也就是指单词和空格间的位置
     匹配单词边界(包含开始和结束),这里的“单词”,是指连续的字母、数字和下划线组成的字符串
     \b定义的是\w和\W的交界,这是个零宽界定符(zero-width assertions)只用以匹配单词的词首和词尾。单词被定义为一个字母数字序列,因此词尾就是用空白符或非字母数字符来标示的

# \b 实例
>>> re.findall(‘i‘,‘i am handisome‘)
[‘i‘, ‘i‘]
# 普通匹配会这样匹配每一个i,但是我现在只想匹配单词‘i’
>>> re.findall(r‘i\b‘,‘i am handisome‘) # r为原始字符串使用,下面有介绍
[‘i‘]  # 这样我只会匹配到单词i 

# 不只是空格,上边定义是\w和\W的交界,也就是说我的特殊字符也属于这个交界,例如
>>> re.findall(r‘i\b‘,‘i&am handisome‘)
[‘i‘]  # &符号也会被\b所匹配到

re.match()

# match 匹配字符串起始位置

# 仅匹配起始位置,后边有符合匹配也不会匹配
>>> r = re.match(‘com‘, ‘comwww.runcomoob‘)
>>> r.group()
‘com‘
>>> r = re.match(‘com‘, ‘www.runcomoob‘)  # 同样包含com但是不是起始位置不匹配
>>> print(r)   # 因为不匹配,所以r就是一个None值
None

# re.match返回的是match的一个对象结果
>>> r = re.match(‘com‘, ‘comwww.runcomoob‘)
<_sre.SRE_Match object; span=(0, 3), match=‘com‘>

# match对象拥有以下几个方法
# group()  返回被re匹配到的字符串
>>> r.group()  # group方法拿这个对象值
‘com‘

# start() 返回匹配开始的位置
>>> r.start()
0

# end() 返回匹配结束的位置
>>> r.end()
3

# span() 返回一个元祖包含匹配(开始,结束)的位置
>>> r.span()
(0, 3)

re.search()

# search()找到第一个匹配的字符串
# search同样返回一个match对象

>>> r = re.search(‘com‘, ‘www.rcomuncomoob‘) # 我有两个com
>>> r.group()
‘com‘
>>> r
<_sre.SRE_Match object; span=(5, 8), match=‘com‘>
# 仅匹配到第1个com

re.sub()

# re.sub() 替换方法
# re.sub(pattern,repl,string,max)
# 将string字符串中匹配pattern的字符串替换为repl
# max为最大替换数

>>> re.sub("g.t",‘have‘, ‘i get a, i got b , i gut c‘)
‘i have a, i have b , i have c‘
>>> re.sub("g.t",‘have‘, ‘i get a, i got b , i gut c‘,2 ) #指定最大替换为2
‘i have a, i have b , i gut c‘

# re.subn() 同样为替换
>>> re.subn("g.t",‘have‘, ‘i get a, i got b , i gut c‘ )
(‘i have a, i have b , i have c‘, 3)
>>> re.subn("g.t",‘have‘, ‘i get a, i got b , i gut c‘,2 )
(‘i have a, i have b , i gut c‘, 2)

# 对比sub,它输出为元祖有两个元素,第一修改后字符串,第二是修改次数

re.split()

# split切割字符串

>>> re.split(‘\d+‘,‘one1two2three3four4‘) # \d+ 等于[1-9]+, 1个到多个数字,按数字切割此字符串
[‘one‘, ‘two‘, ‘three‘, ‘four‘, ‘‘]

# 注意 , 我最后4切割完成后,还保留了一个空字符串为一个元素输出了

re.compile()

# 是将你需要匹配的规则封装为一个对象,然后直接使用这个对象调用findall、search等等匹配字符串

>>> text = "i am handsome"   # 这是我要去匹配的字符串
>>> regex = re.compile(r‘i\b‘)  # 这是我要匹配字符串的规则,封装为compile对象
>>> print(regex.findall(text))   # 我直接使用我封装好的compile对象去字符串匹配
[‘i‘]

正则之原生字符串

>>> re.search(r‘\\‘,‘www\www‘).group()
‘\\‘
# 我们拿\\去后边字符串匹配,匹配到了,但是我们后边字符串并没有\\
# 这是因为,正则本身就是一个语言,在后边字符串输入,只是提供给正则
# 正则当处理我们数据后,返回给python,因为\有特殊予以,所以返回
# python时又转译了字符串
时间: 2024-09-29 22:17:28

python re模块学习(一)的相关文章

Python subprocess模块学习总结

从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn*.os.popen*.popen2.*.commands.*不但可以调用外部的命令作为子进程,而且可以连接到子进程的input/output/error管道,获取相关的返回信息 一.subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec

Python inspect模块学习

今天发现Python inspect模块中一个有趣的功能, 可以让我们方便地检视Python库中的源代码, 知道模块具体是怎样实现的, 满足了像我这样有偷窥欲的人-.- 那就是inspect中的getsource 它的用法如下: 例如要检视Python的The Zen of Python 我们可以: In [1]: import inspect In [2]: import this The Zen of Python, by Tim Peters Beautiful is better tha

Python time模块学习

Python time模块提供了一些用于管理时间和日期的C库函数,由于它绑定到底层C实现,因此一些细节会基于具体的平台. 一.壁挂钟时间 1.time() time模块的核心函数time(),它返回纪元开始的秒数,返回值为浮点数,具体精度依赖于平台. >>>import time >>>time.time() 1460599046.85416 2.ctime() 浮点数一般用于存储和比较日期,但是对人类不友好,要记录和打印时间,可以使用ctime(). >>

python os模块学习

一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台.如果是window 则用'nt'表示,对于Linux/Unix用户,它是'posix'. 2.os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径. 3.os.listdir() 返回指定目录下的所有文件和目录名. >>> os.listdir(os.getc

python logging模块学习(转)

前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的HOWTOs文档很详细,连日志该怎么用都写了,所以有英文阅读能力的同学建议去阅读一下. Logging模块构成 组成 主要分为四个部分: Loggers:提供应用程序直接使用的接口 Handlers:将Loggers产生的日志传到指定位置 Filters:对输出日志进行过滤 Formatters:控制

python 各模块学习

核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4. os 模块 1.5. os.path 模块 1.6. stat 模块 1.7. string 模块 1.8. re 模块 1.9. math 模块 1.10. cmath 模块 1.11. operator 模块 1.12. copy 模块 1.13. sys 模块 1.14. atexit 模块 1.15. time 模块 1.16. types 模块 1.17. gc 模块

Python pycurl模块 学习

pycurl模块的安装方法如下: easy_install pycurl #easy_install安装方法 pip install pycurl #pip安装方法 #源码安装方法 # 要求curl-config包支持,需要源码方式重新安装curl # wget http://curl.haxx.se/download/curl-7.36.0.tar.gz # tar -zxvf curl-7.36.0.tar.gz # cd curl-7.36.0 # ./configure # make &

Python select模块学习

select 是常用的异步socket 处理方法 一般用法: # iwtd,owtd,ewtd 分别为需要异步处理的读socket队列, 写socket队列(一般不用), 和错误socket队列, 返回事件的读写和错误socket队列 il,ol,el = select(iwtd,owtd,ewtd[,timeout]) for sock in il: #read the sock for sock in ol: #... for sock in el: #handle errors selec

Python常用模块学习

1.模块介绍 2.time & datetime模块 3.random 4.os 5.sys 6.shutil 7.json&pickle 8.shelve 9.xml处理 10.yaml处理 11.configparser 12.hashlib 13.subprocess 14.logging模块 15.re正则表达式 1.模块 模块,就是用一坨代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合