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两周了,第二周主要开始了Python内置数据结构的学习,包括从一开始的列表list,元组tuple,字符串string,再到后来的bytes, bytearray, 以及最后的集合set。这些数据结构可以说Python最为基础的几种类型,想要用Python写出漂亮的代码离不开对他们的熟练掌握与深刻理解。这几个结构各有各的特…

    Python笔记 2018-03-31
  • python基础语法之if,else,for,while,continue,break

    如果你了解语法的使用,内有习题可以稍作练习。

    2017-09-16
  • 【福利贴-招聘】- python运维开发工程师

    职位描述  岗位职责: 1、负责公司CMDB的建设,包括资产管理、dns、工单系统、ngnix自动化、监控等的开发 2、帮助运维团队和业务团队提高自动化效率 3、维护和开发持续化集成环境; 4、负责公司运维系统的规划、选型、部署上线和日常维护管理工作; 5、负责CMDB团队的建设、管理和人才培养机制…

    Linux干货 2015-04-03
  • Python 部分知识点总结(八)

    此篇博客只是记录第十周未掌握或不熟悉的知识点,用来加深印象。

    Python笔记 2018-05-13
  • 文件IO常用操作

    io模块 StringIO BytesIO 类
    pathlib模块 路径操作 3.4版本开始
    os模块 更改权限、显示信息 3.4版本之前路径操作
    shuril 模块(高级文件操作
    csv 文件
    configparser模块 ini文件处理

    2018-05-02
  • DevOps 风向标!DevOps国际峰会6月29日正式启航!

    DOIS 大会为您呈现互联网公司与海外企业的实践经验与工具技术,聚焦 DevOps 在金融、电信、零售等行业的系统性实践。在这里我们不空谈、不务虚,实实在在的专注DevOps落地。

    2018-05-16