s='hello world'
print(s.find('llo')) #找到llo
ret=s.replace('ll','xx') #用xx代替ll
print(ret)
print(s.split('o')) #用o分割字符串
通过以上例子可以看出,字符串提供的方法是完全匹配
正则表达式可以用来匹配字符串,可以进行模糊匹配,增加了灵活度
import re
ret=re.findall('w\w{2}l','hello world') #找到w开头,l结尾,中间两个字符任意的字符串
print(ret) #findall找到所有满足条件的结果

一、元字符:(. ^ $ * + ? {} [] | () \)

1.通配符:.

ret=re.findall('w..l','hello world')   # .可以代表所有字符(除换行符外),一个点匹配一位
print(ret) #找到w开头,l结尾,中间两个字符任意的字符串

2.尖角符:^ 只从开头匹配

ret=re.findall('^h...o','jiibhelloko')
print(ret)

3.dollor符:$ 只从结尾匹配

ret=re.findall('h...o$','jiibhelhioko')
print(ret)

4.星号:* 重复前面的字符(0到多次),可以重复普通字符,也可以重复元字符

ret=re.findall('a*','jiibaaaaoko')   #重复a 0到多次
print(ret)
ret=re.findall('a.*li','kiidalexkuulicvyf') #重复点 0到多次
print(ret)

5.加号:+ 重复前面的字符(1到多次),与*类似

ret=re.findall('a+b','jabgagbhiaaaaboko')       #重复a 1到多次
print(ret)

6.问号:? 重复前面的字符(0次或1次)

ret=re.findall('a?ko','jahkoaaaaokojiako')
print(ret) #因为a重复0次或1次,所以此处代表找到ko或ako

7.大括号:{} 重复前面的字符(自定义次数)

ret=re.findall('a{4}hu','huaaaahuffg')       #重复a 4次
print(ret)
ret=re.findall('a{1,3}hu','ahudaaahufaahufg') #重复a 1到3次
print(ret)

8.字符集:[] 取消元字符的特殊功能(\ ^ - 除外)

ret=re.findall('a[chd]x','a,xadcadx')   #匹配三个中任意一个字符,c、h、d都可以
print(ret)
ret=re.findall('a[a-z]x','amxadcakx') #匹配a-z的任意一个字符
print(ret)
ret=re.findall('w[,d*]l','w,,lewkljiw*lwdddl') #匹配逗号/星号/d,此处*不再是对d的重复
print(ret)
ret=re.findall('w[^t,h]','wtwfwgwtwhwjfgtw,hu') #中括号里,上尖号代表取反
print(ret) #此处匹配除t和h以外的其他字符

9.反斜杠:\

(I)反斜杠后边跟普通字符实现特殊功能:

(1) \d 匹配0-9的十进制数,相当于[0-9]

print(re.findall('\d{11}','fi159485526448521'))    #找到一个电话号码

(2) \D 匹配任何非数字字符,相当于[^0-9]

print(re.findall('\D{4}','fi159JIHGB6448521'))

(3) \s 匹配任何空白字符

print(re.findall('\sad','fiad94 ad1'))

(4) \S 匹配任何非空白字符

print(re.findall('\Sad','fiad94 ad1'))

(5) \w 匹配任何字母/数字字符,相当于[a-zA-Z0-9]

print(re.findall('\wad','fiad94 ad1K54ad'))

(6) \W 匹配任何非字母/数字字符,相当于[^a-zA-Z0-9]

print(re.findall('\Wad','fiad94 ad1K5.ad'))

(7) \b 匹配一个特殊字符

print(re.findall(r'\bI','I a.Im a LIST'))     #找出前面带特殊字符的I
print(re.findall(r'I\b','I am a LISTI.P')) #找出后面带特殊字符的I

(II)反斜杠后边跟特殊字符取消特殊功能:

ret = re.search('sb','hducbsbiudhsb')          #search只找到一个满足条件的结果
print(ret)
print(ret.group())
ret=re.search('a\.','asda.dd').group() #反斜杠使通配符失去意义,此处就代表字符 .
print(ret)
ret=re.search('a\+','aaasa+d').group() #反斜杠使加号失去特殊意义,此处就代表字符 +
print(ret)

(III)有时前面加'r'的原因及如何匹配反斜杠

re是一门独立的编程语言,pythdon的两个\\匹配re中的一个\,re是用前面的两个\\匹配后面的一个\(后面的一个顶两)
所以前面不加'r'时,是从python开始解释,4个匹配后面的一个;加'r'时,是从re开始解释,两个即可匹配后面的一个
ret=re.findall('\\\\','afef\c')
print(ret)
ret=re.findall(r'\\','af\ef\c')
print(ret)
ret=re.findall('\bblow','blow') #不加r,从python开始解释,\b在python中也是特殊字符,匹配不到blow
print(ret)
ret=re.findall(r'\bblow','blow') #加r,从re开始解释,\b才能代表re中的特殊字符
print(ret)

10.小括号:() 打包

print(re.search('(as)+','dfasdasasjha').group())  #as作为一个整体

11.竖杠:| 代表或者

print(re.findall('a|3','dfsds3k4'))
print(re.findall('a|3','dfsads3k4'))

二、正则表达式例子

import re
ret=re.search('(?P<id>\d{3})/(?P<name>\w{3})','wdwds456/l5ffff') #(?P<>是一个固定格式,给匹配的内容起名字)
print(ret.group()) #打印整体
print(ret.group('id')) #通过名字打印部分
print(ret.group('name'))

三、正则表达式的方法

1.findall(): 所有满足条件的结果都返回到一个列表里
2.search() : 返回匹配到的第一个对象,该对象可以调用group()查看结果
3.match(): 只在字符串开头匹配
ret=re.match('asd','asddfasd')
print(ret)
print(ret.group()) #返回匹配到的第一个对象,该对象可以调用group()查看结果
4.split() 分割
ret=re.split('[j,s]','hzkjfsh,hg')    #先用j分,再用逗号分,再用s分
print(ret)
ret=re.split('[jh]','hzkjfsog') #先用j分出'hzk'和'fsog',再用h分它两。边界上会分出空字符
print(ret)
5.sub() 替换
ret=re.sub('a..x','skohhb','fdalexji')
print(ret)
6.compile()
ret=re.findall('\.com','syeu.comjiijh')
print(ret)
obj=re.compile('\.com') #匹配规则被编译成一个对象
ret=obj.findall('syeu.comjiijh') #直接用这个对象调用功能,只写字符串就行,不用再写匹配规则。
print(ret) #当多次用到这样的匹配规则时,此法可以起到简化、省时作用
 
 
 
 

正则表达式(re模块)的更多相关文章

  1. python正则表达式Re模块备忘录

    title: python正则表达式Re模块备忘录 date: 2019/1/31 18:17:08 toc: true --- python正则表达式Re模块备忘录 备忘录 python中的数量词为 ...

  2. python 正则表达式re模块

    #####################总结##############    优点:  灵活, 功能性强, 逻辑性强.               缺点:  上手难,旦上手, 会爱上这个东西    ...

  3. python基础之正则表达式 re模块

    内容梗概: 1. 正则表达式 2. re模块的使⽤ 3. 一堆练习正则表达式是对字符串串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤.使用正则的优缺点: 优点: 灵活,功能性强, ...

  4. python记录_day23 正则表达式 re模块

    一. 正则表达式 使用python的re模块之前应该对正则表达式有一定的了解 正则表达式是对字符串操作的一种逻辑公式.我们一般使用正则表达式对字符串进行匹配和过滤. 正则的优缺点: 优点:灵活, 功能 ...

  5. Python面试题之Python正则表达式re模块

    一.Python正则表达式re模块简介 正则表达式,是一门相对通用的语言.简单说就是:用一系列的规则语法,去匹配,查找,替换等操作字符串,以达到对应的目的:此套规则,就是所谓的正则表达式.各个语言都有 ...

  6. Python 正则表达式——re模块介绍

    Python 正则表达式 re 模块使 Python 语言拥有全部的正则表达式功能,re模块常用方法: re.match函数 re.match从字符串的起始位置匹配,如果起始位置匹配不成功,则matc ...

  7. 学习django之正则表达式re模块

    re(regular expression)模块 正则表达式(regular expression)主要功能是从字符串(string)中通过特定的模式(pattern),搜索想要找到的内容. 一.re ...

  8. 正则表达式re模块

    正则表达式模块re 1. 正则简介 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言, (在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被 编译 ...

  9. python正则表达式——re模块

    http://blog.csdn.net/zm2714/article/details/8016323 re模块 开始使用re Python通过re模块提供对正则表达式的支持.使用re的一般步骤是先将 ...

  10. Python自动化运维之8、正则表达式re模块

    re模块 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串,在文本处理方面功能非常强大,也经常用作爬虫,来爬取特定内容,Python本身不支持正则,但是通过导入re模块,Python ...

随机推荐

  1. Xilinx 学习笔记1---新建工程和创建源代码文件

    最近终于有空可以记录一些之前学习的内容,本博客系列记录笔者Xilinx ISE学习之旅,当然现在Vivado是学习热门,一步一步来.搞定 ISE,Vivado上手也会很快. 1.安装软件 软件部分的下 ...

  2. saltstack在jianja模板中,执行salt函数来获取某些变量的值,并且将配置写入到配置文件中?

    问题描述: 通过saltstack的jinja模板方式,可以将变量的值写入到配置文件,即动态获取的方式.这里介绍,通过执行salt函数来获取值的方式. 演示: 1.通过在sls中,增加jinja的模板 ...

  3. Linux date 命令

    date命令用于打印或设置系统日期和时间,常见用法如下: [root@localhost ~]# date //查看当前时间 [root@localhost ~]# date +"%Y-%m ...

  4. 微信小程序之this.setData

    Page.prototype.setData() setData 函数用于将数据从逻辑层发送到视图层,同时改变对应的 this.data 的值. 注意: 直接修改 this.data 无效,无法改变页 ...

  5. Centos 7 更换yum源

    Centos 7 更换源 yum clean all wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/ ...

  6. Hudson持续集成服务器的安装配置与使用

    Hudson只是一个持续集成服务器(持续集成工具),要想搭建一套完整的持续集成管理平台, 还需要用到前面课程中所讲到的 SVN.Maven.Sonar等工具,按需求整合则可. 1.安装  JDK并配置 ...

  7. rails 杂记 - erb 中的 form_helper

    原文 1. form_tag 1) 基础 Form <%= form_tag do %> Form contents <% end %> 生成 html <form ac ...

  8. Java之JVM监控工具分享

    Java之JVM监控工具分享 JVM的基本知识常用的也就是类加载机制,内存区域.分配.OOM,GC,JVM参数调优 几个链接自己看: 内存区域&类加载机制 分配策略&垃圾回收算法.收集 ...

  9. Javascript中只能在 HTML 输出流中使用 document.write,在文档已加载后使用它(比如在函数中),会覆盖整个文档。

    意思就是说,初次加载时如果没有加载document.write,那么再次加载的时候回覆盖掉原来的内容,只显示新加载的内容. <!DOCTYPE html> <html> < ...

  10. hive reduce 阶段GC Exception

    某个reduce中的value堆积的对象过多,导致jvm频繁GC. 解决办法: 1. 增加reduce个数,set mapred.reduce.tasks=300,. 2. 在hive-site.xm ...