python第一篇:正则表达式的方法简单归纳

首先先对一些常用的匹配模式进行一下介绍及互相认识一下,当然了可能它认识我,但我绝对还不认识它。。。

********************************************

元字符 【 . ^ $ * + ? {} [] \ | () 】

********************************************

1、[.] 匹配任意1个字符,除了换行符(\n)。

要匹配包括‘\n‘在内的任何字符,就使用‘[.\n]‘的模式

例:

import re

print(re.findall(r‘a.‘,‘ab ac afbbbb‘))

>> [‘ab‘, ‘ac‘, ‘af‘]

2、[|] 或 匹配符号左边或右边的字符

例:

import re

str1=‘dit dot det,dct dit dot‘

print (re.findall(‘det|dct‘,str1))

>> [‘det‘, ‘dct‘]

3、[] 字符集合,匹配这个集合里面的任意一个就可以

[ic]表示i或c,‘d[ic]t‘表示dit和dct两者,和‘dit|dct‘等价

[^abc ] 代表反取,代表取abc之外的字符串

例:

import re

str1=‘dit dot det,dct dit dot‘

print (re.findall(‘d[ic]t‘,str1))

>> [‘dit‘, ‘dct‘, ‘dit‘]

4、^ 表示否定 [^ic]表示 除了i和c

例:

import re

str1=‘dit dot det,dct dit dot‘

print (re.findall(‘d[^ic]t‘,str1))

>> [‘dot‘, ‘det‘, ‘dot‘]

4-2 匹配字符串的开头 ^dit 表示子串dit在开头位置

例:

import re

str1=‘dit dot det,dct dit dot‘

print (re.findall(‘^dit‘,str1))

>> [‘dit‘]

5、$ 匹配字符串的末尾 ‘dot$‘ 表示子串dot要在末尾位置

import re

str1=‘dit dot det,dct dit dot‘

print (re.findall(‘dot$‘,str1))

>> [‘dot‘]

6、+ ‘di+t’ 表示d与t之间省略了一个或多个i

import re

str1=‘dit dot det,dct diit dot‘

print (re.findall(‘di+t‘,str1))

>> [‘dit‘, ‘diit‘]

7、* 匹配*号前的一个字符0次或多次

‘di*t’表示d与t之间省略了零个至多个i

import re

str1=‘dit dt det,dct diit dot‘

print (re.findall(‘di*t‘,str1))

>> [‘dit‘, ‘dt‘, ‘diit‘]

扩展 ‘.+’搭配使用,表示省略了一个至多个任意元素

‘.*’ 搭配使用,表示省略了零个至多个任意元素

import re

str1=‘d dt dit diit dot‘

print (re.findall(‘d.*t‘,str1))

print (re.findall(‘d.+t‘,str1))

>> [‘d dt dit diit dot‘]

>> [‘d dt dit diit dot‘]

8、? 匹配?前的一个字符0次或1次 ‘di?t’表示i可有可无,即dt,dit都满足条件

import re

str1=‘d dt dit diit det‘

print(re.findall(‘di?t‘,str1))

>> [‘dt‘, ‘dit‘]

8-2 ? 清除贪婪匹配

9、{} di{n}t 表示d和t之间有n个i

import re

str1=‘d dt dit diit det‘

print(re.findall(‘di{2}t‘,str1))

>> [‘diit‘]

9-2 {} di{n,m}t 表示d和t之间有n到m个i

import re

str1=‘d dt dit diit diiiit det‘

print(re.findall(‘di{2,4}t‘,str1))

>> [‘diit‘, ‘diiiit‘]

扩展:n和m都可以省略。{n,}表示n个到任意个;{,m}表示0到m个;{,}表示任意个

import re

str1=‘d dt dit diit diiit diiiit det‘

print(re.findall(‘di{3,}t‘,str1))

print(re.findall(‘di{,3}t‘,str1))

print(re.findall(‘di{,}t‘,str1))

>> [‘diiit‘, ‘diiiit‘]

[‘dt‘, ‘dit‘, ‘diit‘, ‘diiit‘]

[‘dt‘, ‘dit‘, ‘diit‘, ‘diiit‘, ‘diiiit‘]

10、\ 取消元字符,变成转义字符

就是说如果你想让特殊字符失去python语言赋予的意义变成普通字符,就在前面加上\

例:

import re

print(re.findall(r‘\?.‘,‘ab? ac af?bab?b‘))

>> [‘? ‘, ‘?b‘, ‘?b‘]

10-2、 \ 预定义字符

例:

import re

str1=‘12 abd 34 def‘

print(re.findall(‘\d‘,str1))

print(re.findall(‘\w‘,str1))

>> [‘1‘, ‘2‘, ‘3‘, ‘4‘]

[‘1‘, ‘2‘, ‘a‘, ‘b‘, ‘d‘, ‘3‘, ‘4‘, ‘d‘, ‘e‘, ‘f‘]

11、() 在匹配字符串后,只输出匹配字串()里面的内容

import re

str1=‘12abcd34‘

print(re.findall(‘12abcd34‘,str1))

print(re.findall(‘1(2a)bcd‘,str1))

print(re.findall(‘1(2a)bc(d3)4‘,str1))

>> [‘12abcd34‘]

[‘2a‘]

[(‘2a‘, ‘d3‘)]

***************************************************************

re模块的主要方法

findall() finditer() match() search() compile() aplit() sub() subn()

***************************************************************

1、re.match(1正则表达式,2要匹配的字符串,3标志位“用于控制正则表达式的匹配方式”)

开始位置:从第一个单词中匹配字符串,如果匹配到就返回一个结果,匹配不到就返回None

例:

import re

print (re.match(‘www‘,‘www.baidu.com‘).span())

print (re.match(‘baidu‘,‘www.baidu.com‘))

>> (0, 3)

None

2、re.search(1正则,2原字符串,3标志位)

匹配规则:扫描整个字符串并返回第一个成功匹配的结果,没有就返回None

例:

import re

print (re.search(‘www‘,‘www.baidu.com‘).span())

print (re.search(‘baidu‘,‘www.baidu.com.baidu‘).span())

>> (0, 3)

(4, 9)

3、re.findall()

匹配规则:从左往右搜索,结果1以list的形式返回,没有匹配到就返回空列表

例:

import re

print (re.findall(‘www‘,‘www.baidu.com.wwww‘))

print (re.findall(‘www‘,‘nishuosdhsds‘))

>>[‘www‘, ‘www‘]

[]

4、re.finditer()

匹配规则:从左往右搜索,但是结果以迭代器的形式返回

例:

import re

str1=‘ab cd e‘

istr1=re.finditer(‘\w+‘,str1)

for a in istr1:

print (a.group(),a.span())

扩展:a.group()返回满足匹配调节的子串,a.span()返回子串的起始位置 和末尾位置

>> (‘ab‘, (0, 2))

(‘cd‘, (3, 5))

(‘e‘, (6, 7))

5、re.compile()

匹配规则:对匹配格式先进行编译,返回一个实例对象。然后再使用它,可以加快匹配速度

例:

import re

str1=‘abcdeabfg‘

pre=re.compile(‘ab‘)

print (pre.findall(str1))

>> [‘ab‘, ‘ab‘]

6、re.split()

匹配规则:在string匹配正则表达式时进行分割

例:

import re

str1=‘abc.d.ea.bfg.rere‘

str2=‘12+34-56*78/90‘

print (re.split(‘\.‘,str1))

print (re.split(‘[\+\-\*/]‘,str2))

>> [‘abc‘, ‘d‘, ‘ea‘, ‘bfg‘, ‘rere‘]

[‘12‘, ‘34‘, ‘56‘, ‘78‘, ‘90‘]

7、re.sub(1正则,2替换的字符串,3原始字符串,4匹配后替换的最大次数)

匹配规则:用于替换字符串中的匹配项

例;

import re

str1=‘abcdefg‘

print (re.sub(‘b‘,‘123‘,str1))

>> a123cdefg

8、re.subn()

匹配规则:功能与sub相似,但返回结果多了一个数字,代表替换了多少次

例:

import re

str1=‘abcdebnfgcb‘

print (re.subn(‘b‘,‘123‘,str1))

>> (‘a123cde123nfgc123‘, 3)

****************************************************

还有一些关于字母的 \A \b\B \d\D \G \s\S \w\W \z\Z

#####[0-9] [a-z] [A-Z] [a-zA-Z0-9] [^0-9]

****************************************************

1、\A 匹配字符串开始,不能进行多行匹配(^)

例:

import re

print(re.findall(r‘\Ahttp://‘,‘http://www.baidu.com is good\nhttp://www.sohu.com‘,re.M))

>> [‘http://‘]

2、\Z 匹配字符串的结尾,不能进行多行匹配($)

例:

import re

print(re.findall(r‘\.jpge\Z|\.png\Z|\.gif\Z‘,‘touxiang.gif\nqq.png‘,re.M))

>> [‘.png‘]

3、\d 匹配一个数字

\w 匹配一个字母或数字

. 匹配任意字符

例:

‘00\d‘ 可以匹配‘007‘,不能匹配‘00A‘

‘\d\d\d‘可以匹配‘010‘

‘\w\w\d‘可以匹配‘py3

‘py.‘可以匹配‘py1‘‘pyc‘‘py!‘

* 匹配任意个字符(包括0个)

. 匹配1个字符

+ 匹配至少一个字符

?表示0个或1个字符

{n} 表示n个字符

{n,m}表示n-m个字符

4、\s 匹配任意空白字符

\S匹配任意非空字符

例:

\d{3}\s+\d{3,8}

>> \d{3} 表示匹配3个数字 如‘010‘

\s 可以匹配一个空格 \s+表示至少有一个空格 如‘ ‘,‘ ‘等

\d{3,8} 表示3-8个数字 如‘1234567‘

5、精确匹配

[0-9a-zA-Z\_] 可以匹配一个数字、字母或下划线

[0-9a-zA-Z\_]+ 可以匹配至少由一个数字、字母或下划线组成的字符串。如‘a100‘,‘0_z‘,‘Py003‘

[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母下划线开头,后接任意一个数字、字母下划线组成的字符串

[a-zA-Z\_][0-9a-zA-Z\_]{0,19}限制了变量的长度是1-20个字符(前面一个字符+后面最多19个字符)

^ 表示行的开头,^\d 表示必须以数字开头

$ 表示行的结束 \d$表示必须以数字结束

************************************************

分组

除了简单的判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(group)

************************************************

1、group()或group(0)就是匹配正则表达式整体结果

例:

import re

test=‘010-12345‘

m= re.match(r‘^\d{3}\-\d{3,8}$‘,test)

print (m.span(),m.group())

>> ((0, 9), ‘010-12345‘)

2、group(1)列出第一个括号匹配的部分,group(2)列出第二个括号匹配的部分.

如果正则表达式中没有括号,group(1)肯定是不对的了。

例:

import re

a=‘123abc456‘

print (re.search(‘([0-9]*)([a-z]*)([0-9]*)‘,a).group())

print (re.search(‘([0-9]*)([a-z]*)([0-9]*)‘,a).group(1))

print (re.search(‘([0-9]*)([a-z]*)([0-9]*)‘,a).group(2))

print (re.search(‘([0-9]*)([a-z]*)([0-9]*)‘,a).group(3))

>> 123abc456

123

abc

456

3、groups() 返回一个包含所有小组字符串的元组,从1到所含的小组号

例:

import re

a=‘123abc456‘

print (re.search(‘([0-9]*)([a-z]*)([0-9]*)‘,a).group())

print (re.search(‘([0-9]*)([a-z]*)([0-9]*)‘,a).group(1))

print (re.search(‘([0-9]*)([a-z]*)([0-9]*)‘,a).group(2))

print (re.search(‘([0-9]*)([a-z]*)([0-9]*)‘,a).group(3))

print (re.search(‘([0-9]*)([a-z]*)([0-9]*)‘,a).groups())

>> 123abc456

123

abc

456

(‘123‘, ‘abc‘, ‘456‘) 重要看这条!!!

**********************************************

贪婪匹配

**********************************************

正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。

例:

import re

print (re.match(r‘^(\d+)(0*)$‘,‘1012300‘).groups())

>> (‘1012300‘, ‘‘)

此处\d+采用贪婪匹配,直接把后面的0也给匹配了,导致0*智能匹配空字符串

加个?就可以让\d+采用非贪婪匹配

例:

import re

print (re.match(r‘^(\d+?)(0*)$‘,‘1012300‘).groups())

>> (‘10123‘, ‘00‘)

原文地址:https://www.cnblogs.com/pf109/p/9896829.html

时间: 2024-10-11 00:21:35

python第一篇:正则表达式的方法简单归纳的相关文章

python第一篇

python第一篇 1.python简介 python是一门简单易学而且功能强大的编程语言,它有高效的内置数据结构,并且能够用简洁的语法进行面向对象编程.python简洁的语法和良好的编译解释性,使得它能够成为大多数领域的使用语言,如web开发,科学运算,人工智能,系统运维,金融分析,图形GUI等,很多领域都可以看到python的影子.既然python这么厉害,那为什么不学起来呢?come body!  life is short ,you need python! 2.基本数据类型 首先介绍的

python第一篇-------python介绍

python第一篇-------python介绍 一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语言的编译器.Python这个名字,来自Guido所挚爱的电视剧Monty Python's Flying Circus.他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言. 最新的TIOBE排行榜,Python赶超PHP占据第4, Py

进击python第一篇:相遇

1.第一句Python代码 在 当前目录下创建 hello.py 文件,内容如下: print "hello,world!" 执行 hello.py 文件,即: python hello.py 注:后缀可以不是.py python内部执行过程如下: 2.解释器 上一步中执行 python hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行. 如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,则 要有执行(x)权限

Behave + Selenium(Python) ------ (第一篇)

Behave 介绍: 最近一个项目用了behave来做测试,因为之前没有接触过,所以写下最近的心得总结. 做自动化的人估计对selenium已经不是很陌生了,但是对于Behave工具,估计很少有人听说过.Behave是BDD(Behavior drive development - 行为驱动开发)的框架.这个框架用来做敏捷开发比较多.QA,开发人员,客户和产品经理都可以加入Behave中来.其中behave包括的feature部分,一般来说是客户或者不懂代码的人来写,然后QA根据客户的行为来编写

python第一百三十天 ---简单的BBS论坛

简单的BBS论坛 实现功能 git仓库地址:https://github.com/uge3/BBS 1.整体参考"抽屉新热榜" + "博客园" 2.实现不同论坛版块 3.帖子列表展示 4.个人博客主页 5.个人博客标签.分类.时间 筛选 6.帖子评论数.点赞数展示 7.允许登录用户发贴.评论.点赞 8.允许上传文件(个人头像) 9.可进行多级评论 10.个人博客后台管理(创建\编辑\删除文章,个人分类\个人标签管理,可以选择个人博客主题,) 11, 通过admin模

Python学习,可爱的Python第一篇

使用vim编辑器,首先新建一个py文件:vim print_filename.py 1.读取指定目录下地所有文件和目录名 print_filename.py #-** coding:utf-8 -*-     //注释,提示使用支持Unicode编码的编辑器环境 improt os   //引用os 模块 print os.listdir("/Users/baolinfang") //读取/Users/baolinfang下地所有文件和目录 2.读取指定目录下所有的文件/目录信息 pr

Python 第一篇:python简介和入门

一.python简介 1.python下载地址:https://www.python.org/downloads/ Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者. Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和

人生苦短,我用Python 第一篇

一.变量名 自定义变量名只能用 数字.字母.下划线组成. 使用变量前,需对其先赋值 注意:1.变量名不能以数字开头:      2.不能是关键字:例如:'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda',

python第一篇 条件循环小练习

输出1 2 3 4 5 6 8 9 10 #!/bin/usr/env python n = 1; while n<11: if n == 7: pass else: print(n) n = n+1 print("---end---") 输出1-100内的奇数 #!/bin/usr/env python n = 1; while n<101: if n % 2 == 0: pass else: print(n) n = n+1 print("---end---&