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

相关推荐

  • 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
  • Python面向对象基础

    语言分类 面向机器 抽象成机器指令,让机器容易理解 代表:汇编语言 面向过程 按照步骤一步一步走,若出现情况A做相应的处理,若出现情况B做相应的处理 问题规模小,可以步骤化,按部就班处理 代表:C 面向对象OOP 计算机需要处理的问题的规模越来越大,需要多人、多部门协作 代表:C++、Java、Python 面向对象 一种认识世界、分析世界的方法论。将万事万…

    2018-05-06
  • 二叉树的遍历和堆排序

    二叉树的遍历和堆排序

    Python笔记 2018-05-16
  • 基于Python和MoviePy库实现数据的动态展示

    基于Python和MoviePy库实现数据的动态展示 (翻译:以马内利)  原文链接:Data Animations With Python and MoviePy   Python拥有很多实现数据可视化的库,但是很少可以展示GIFs的动态视图。 这篇博客主要介绍怎样使用MoviePy库作为一个其他可视化库的通用插件。 Movi…

    2015-03-26
  • DevOps如何重构IT战略

    翻译: 至尊宝 原文: http://www.citeworld.com/article/2897738/development/how-devops-can-redefine-your-it-strategy.html?page=2   DevOps究竟是昙花一现还是你一直在寻找的竞争优势?我们咨询了一些专家,对于这种趋势他们的想法是什…

    Python干货 2015-03-26
  • python中list,tuple和字符串的处理方法和函数比较

    列表list的定义和初始化list() -> new empty listlist(iterable) -> new list initialized from iterable’s itemslst=[1,[],’we’,None]iterable可迭代对象可以是列表,元组,字符串.列表中的元素可以是任意元素…

    2017-09-24