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
下一篇 2017-11-07

相关推荐

  • Python爬虫入门

    自己在网上学习的一些内容,分享给大家,希望大家和我一样,可以快速掌握Python爬虫 一、爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库的高级用法 5. Python爬虫入门五之URLError异常处理 6. Pyt…

    2018-01-23
  • 制作python模块安装包[原创]

     python的第三方模块越来越丰富,涉及的领域也非常广,如科学计算、图片处理、web应用、GUI开发等。当然也可以将自己写的模块进行打包或发布。一简单的方法是将你的类包直接copy到python的lib目录,但此方式不便于管理与维护,存在多个python版本时会非常混乱。现介绍如何编写setup.py来对一个简单的python模块进行打包。 一、…

    Linux干货 2015-03-27
  • 滑动窗口

    数据载入 def load(path:str): with open(path) as f: for line in f: tmp = extract(line) if tmp: yield tmp else: # TODO 解析失败就抛弃,或者打印日志 continue 时间窗口分析 概念 很多数据,例如日志,都和时间相关的,都是按照时间顺序产生的。 产生…

    2017-11-04
  • python内置数据结构

    python内置数据结构 sort(key=none,resverse=false)—>none 对列表元素进行排序,就地修改。默认升序 resvers为true,反转,降序 key为一个函数,指定key如何排序 ls.sort(key=functionaame) Print(lst.sort(key=str,reverse=Ture) I…

    Python笔记 2018-03-31
  • 文件操作

    文件操作 冯诺依曼体系架构 CPU由运算器和控制器组成 运算器,完成各种算数的运算,逻辑运算,数据传输等数据加工处理 控制器,控制程序的执行 存储器,用于记忆程序的数据,列如内存 输入设备,将数据或者程序输入到计算机中列如键盘 鼠标 输出设备,将数据或者程序的处理结果展示给用户,列如显示器,打印机等等   一般说的IO操作,指的是文件的IO,如果是指网络的I…

    Python笔记 2018-05-02
  • Python函数

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

    2018-04-16