python正则表达式

正则表达式
^行首锚定 $行尾锚定
.匹配任意字符一次
\w匹配非空白字符一次
\s匹配空白字符一次
\d匹配数字一次
*表示前面的正则表达式会重复0到多次
+匹配前面的字符重复0到多次
.+ 相当于匹配多次任意字符,至少一次
\w+相当于匹配非空字符一到多次
?前面的字符匹配一次或不匹配

有一个上面两种类似的{}表示前面的字符出现次数
{1,}相当于+ {0,1}相当于? {n}重复n次 {m,n}重复m到n次
{0,}不相当于* ,因为它匹配到的多个字符必需是重复的

\b匹配边界 边界指的是匹配的一边是空格或换行(制表符也是空格)另一边不是空格或换行
‘ {1,}\bab’ 比配ab前面至少一个空格 ‘\bc’匹配字符c前面是个空格或换行

多个符号联合使用,匹配一般都是尽可能多的匹配(对*而言)
匹配是从前往后开始匹配,一段满足会打印后再从当前位置开始继续
a.b.*ab 匹配 ‘ adb erabqw ab’会取到’adb erabqw ab’
贪婪模式与非贪婪模式,这个都是针对重复匹配的符号而言的
*尽可能多的匹配字符,.*尽可能多的匹配任意字符,非贪婪模式*?可以匹配前面字符任意次,但尽量少的匹配
+尽可能多匹配前面的字符或表达式,至少一次,非贪婪模式+?匹配前面字符字少一次,但匹配次数要满足后面的条件就截止了
?匹配0次或者一次,非贪婪模式??能不匹配前面的字符就不匹配(匹配也只能匹配一次)这个的非贪婪模式实际用处不大
{n,}匹配前面的字符尽可能多次,且不少于n次,非贪婪模式{n,}?匹配前面字符至少n次,但满足了后面的匹配条件了就截止
{n,m}匹配前面字符n次到m次,但尽量多的匹配,非贪婪模式{n,m}?匹配前面的字符n到m次,但尽量少的匹配

其他标识符
\B 匹配不是边界,本身不占字符 t\B匹配t的后面不是边界(空格) \Bt匹配t的前面不是边界
i\Bt 相当于匹配 it i\B t 不可能匹配得到
\D 匹配非数字
\S匹配非空白字符
\W匹配\w外的字符

[]匹配字符之一 [abc] [0b]

结构符号
‘|’ 或者符号
分组
(pattern)表达式\1 表示重复匹配前面的内容 1为默认的分组号
python中 (?P<name>exp) 分组捕获,但是可以通过name访问

断言
表达式(?=exp) 断言表达式右边出现exp
(?<=exp)表达式 断言表达式左边有exp
(?!exp) (?<!exp)

 

正则表达式使用
模块 re
类方法 result =re.match() re.search() re.fullmatch() re.findall() re.finditer() .split() .groud .sub()
对象方法 对re类的对象使用 regex =re.compile(‘正则表达式’)
result= regex.match() regex.search() regex.fullmatch()
regex.findall() regex.finditer()
它们的方法大部分都公有,使用后的执行效果也差不多,有的可能用的很少占不列出

匹配模式 re.M多行模式 re.S依然从头开始找(默认模式)

类方法 result =re.func(‘正则表达式’,待匹配的字符串,[匹配模式])

对象方法 regex =re.compile(‘正则表达式’,[匹配模式])生成对象
result =func(待匹配的字符串)

re.match(‘b’,s) 默认从索引0开始匹配s,没有匹配到返回空,无法设置
打印result值 <_sre.SRE_Match object; span=(0, 1), match=’b’>
re.compile(‘b’) 设置从索引10,开始匹配,返回值一样
match(s)

re.search(‘b’,s) 从0开始匹配到第一个满足表达式,返回与match类似,对象方法可以设置起始索引
<_sre.SRE_Match object; span=(8, 9), match=’a’>
search(s,10)

re.fullmatch() 全长匹配

regex.fullmatch(s,4,5) 匹配区间全长匹配

re.findall(‘正则’,s) regex.findall(s) 返回多次match匹配的结果的列表

re.finditer(‘正则’,s) regex.finditer(s) 返回迭代器, 迭代后返回match的对象

re.match() .split() .sub

 

匹配电子邮箱
^\w[\w\.-]+@\w[\w\.-]+\.[a-zA-Z]+

匹配html标记
<a[^<>]*href=[“‘]?([^”‘]+)[“‘]?[^<>]*>

匹配URL
(\w+)://([\S]+)

切割文本单词
lst =re.split(‘[^-\w]+’,s)

d =defaultdict(lambda :0)
for line in f:
for sub in re.split(‘[^-\w]+’,line):
if len(sub) >0:
d[sub] +=1

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88246

(0)
daishitongdaishitong
上一篇 2017-11-06 20:38
下一篇 2017-11-07 15:02

相关推荐

  • 高阶函数

    高阶函数
    柯里化
    装饰器、文档字符串
    functools 模块 inspect 模块

    2018-04-25
  • python安装失败原因分析(未指定错误0x80072efd)

    python安装时间很长,最终报错未指定错误0x80072efd   原因分析: download dubugging symbols download debug binaries 这两项需要联网(外网),国内安装会超时报错。所以安装时取消这两项就可以安装成功      

    2018-08-09
  • Python入门之迭代,列表解析,生成器及文件操作

    迭代器是访问集合元素的一种方式,迭代器包含了__iter__()(返回迭代器对象本身)next()(返回迭代器的下一个元素)迭代器只能往前不会退后 以下类型支持迭代 序列类型:list,str,tuple 非序列类型:dict,file 自定义类 通过内建的函数iter()或对象自带方法__iter__可以获取迭代器对象 l1=range(5) iter1=…

    Linux干货 2015-12-13
  • mysql慢查询日志进行按库切割重写文件然后分析

    需求: 把每天的慢查询日志进行按库切割 对每个库的慢查询日志进行分析 思路: 工具/功能 一般统计信息 高级统计信息 脚本 优势 mysqldumpslow 支持 不支持 perl mysql官方自带 mysqlsla 支持 支持 perl 功能强大,数据报表齐全,定制化能力强. mysql-explain-slow-log 支持 不支持 perl 无 my…

    Linux干货 2015-04-03
  • Python函数

    函数 数学函数 Python函数 若干语句块、函数名称、参数列表构成,组织代码的最小单元 完成一定的功能 作用 结构化编程对代码的最基本的封装,一般按照功能组织一段代码 复用,减少冗余代码 简洁美观,可读易懂 函数分类 内建函数,max()、reversed() 库函数,math.ceil() 函数定义、调用 def语句定义函数 def 函数名(参数列表):…

    2018-04-16
  • 函数的一些简单笔记

    函数 数学定义:y=f(x),y是x的函数,x是自变量 Python函数: 1、有若干个语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元 2、完成一定的功能 函数的作用: 1、结构化编程对代码的基本的封装,一般按照功能组织一段代码 2、封装的目的为了复用,减少冗余代码 3、代码更加简洁美观、可读易懂 函数的分类: 1、内建函数,如max()、…

    2017-10-15