.findall()   直接匹配字母和数字

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

import re
print(re.findall("alex","slfdlslalexgsj"))
>>>['alex']

.  表示代表两个任意字符

import re
print(re.findall("a..x","slfd123salexgsj"))
>>>['alex']
import re
print(re.findall("a..x","alexsdsadfxdlggsj"))
>>>['alex', 'adfx']

^  表示从开头开始匹配

import re
print(re.findall("^a..x","alexsdsdlggsj"))
>>>['alex']

$  匹配结尾的位置

import re
print(re.findall("a..x$","alexsdsadfxdafhx"))
>>>['afhx']
import re       #不能匹配$符
print(re.findall("a..x$","alexsdsadfxdafhx$"))
>>>[]

*  (0,+00)     匹配与前面的一个字符直到无穷次  没有的话匹配为“”      贪婪匹配

 import re
print(re.findall("d*","aldddddddddfhx"))
>>>['', '', 'ddddddddd', '', '', '', '']
import re
print(re.findall("^d*","ddddddddhhshfhx"))
>>>['dddddddd']
print(re.findall("alex*","sodale"))
>>>['ale']

+(1,+00)     匹配与前面的一个字符直到无穷次  必须要有一个            贪婪匹配

import reprint(re.findall("alex+","sodalex"))
>>>['alex']
import re
print(re.findall("alex+","sodale"))
>>>[]

?(0,1)  最多匹配一个。

import re
print(re.findall("alex?","sfhalexxdj"))
print(re.findall("alex?","sfhaledj"))
>>>['alex']
>>>['ale']

{0,}==*

{1,}==+

{0,1}==?

{6}==只匹配6个

{1,6}==匹配1~6个

import re
print(re.findall("alex{0,3}","sfhalexxdj"))
print(re.findall("alex{3}","sfalexxledj"))
>>>['alexx']
>>>[]

?  变成惰性匹配

 import re
print(re.findall("alex*?","sfhalexxdj"))
print(re.findall("alex+?","sfalexxledj"))
>>>['ale']
>>>['alex']

[]   或的意思   括号里面 都 单独 拿出来匹配    括号内至少要有一个     [-]表示a~z   [^]表示非     [\]转意

 import re
print(re.findall("www[oldboy baidu]","wwwbaidu"))
>>>['wwwb']
print(re.findall("q[a*z]","dfdfduqaa"))
>>>['qa']
print(re.findall("q[a-z]","dfdfqd13uq"))
>>>['qd']
print(re.findall("[^ads]","asda123123d"))
>>>['', '', '', '', '', '']

\d  匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b  匹配一个特殊字符边界,比如空格 ,&,#等

\ \\ \\\\

 import re
ret=re.findall('c\l','abc\le')
print(ret)#[]
ret=re.findall('c\\l','abc\le')
print(ret)#[]
ret=re.findall('c\\\\l','abc\le')
print(ret)#['c\\l']
ret=re.findall(r'c\\l','abc\le')
print(ret)#['c\\l']
#-----------------------------eg2:
#之所以选择\b是因为\b在ASCII表中是有意义的
m = re.findall('\bblow', 'blow')
print(m)
m = re.findall(r'\bblow', 'blow')
print(m

1 gan = "\\"
2 print(gan)#\ python解释器中字符串\\,才表示一个\
3 print(re.findall("\\\\",gan)) #['\\'],其实就是一个\

|   或的意思  左边或者右边

import re
print(re.findall(r'ka|b','sdjkalbsf'))
>>>['ka', 'b']

()  先匹配元字符

print(re.findall(r'(abc)+','abcabc'))
>>>['abc']

.search()     取第一组数据   分组之后要保留后面组的数据

 import re
s = re.search('(?P<name>\w+)(?P<name1>\d+)j','ssf51sf515jjk')
print(s.group())
>>>ssf51sf515j
print(s.group("name"))
>>>ssf51sf51
print(s.group("name1"))
>>>5

.match()  匹配开始的位置

print(re.match("\d+","454alexsd25d376d1df").group())
>>>454

.split()

 print(re.split(" ","hello abc def"))
>>>['hello', 'abc', 'def']
print(re.split("[ |]","hello abc|def"))
>>>['hello', 'abc', 'def']
print(re.split("[ab]","asdabcd"))
>>>['', 'sd', '', 'cd']

.sub()  替换  可以写匹配次数

print(re.sub("\d+","A","lshl655sg5s5g3"))
>>>lshlAAAsgAsAgA
print(re.sub("\d+","A","lshl655sg5s5g3",2))
>>>lshlAsgAs5g3

.subn()   显示次数

print(re.subn("\d+","A","lshl655sg5s5g3"))
>>>('lshlAsgAsAgA', 4)

.compile()    把功能换成变量

import re
com=re.compile("\d+")
print(com.findall("ks23sd3gs5d"))
>>>['', '', '']

.finditer()    变成可迭代 的对象

import re
ret=re.finditer("\d","jjf561fg1515g")
print(next(ret).group())
print(next(ret).group())
>>>5
>>>6

坑的可以呀re的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  2. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  3. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  4. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  5. 踩石行动:ViewPager无限轮播的坑

    2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...

  6. 为C# as 类型转换及Assembly.LoadFrom埋坑!

    背景: 不久前,我发布了一个调试工具:发布:.NET开发人员必备的可视化调试工具(你值的拥有) 效果是这样的: 之后,有小部分用户反映,工具用不了(没反应或有异常)~~~ 然后,建议小部分用户换个电脑 ...

  7. 首个threejs项目-前端填坑指南

    第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来.经过老板20天惨无人道的摧残,终于小有成就. 因为第一次搞 ...

  8. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  9. 关于微软HttpClient使用,避免踩坑

    最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...

  10. iOS审核这些坑,腾讯游戏也踩过

    作者:Jamie,专项技术测试工程师,在iOS预审和ASO优化领域从事专项测试相关工作,为腾讯游戏近100个产品提供专项服务. WeTest 导读 在App上架苹果应用商店的过程中,相信大多数iOS开 ...

随机推荐

  1. C#常用操作类库四(File操作类)

    public class FileHelper : IDisposable { private bool _alreadyDispose = false; #region 构造函数 public Fi ...

  2. jQuery的选择器中的通配符总结

    1.选择器 (1)通配符: $("input[id^='code']");//id属性以code开始的所有input标签 $("input[id$='code']&quo ...

  3. 详解div+css相对定位和绝对定位用法

    1.定位的专业解释: (1)语法 position:static|absolute|fixed|relative 从上面语法可以看出,定位的方法有很多种,它们分别是静态(static),绝对定位(ab ...

  4. ArcGIS图层介绍

    什么是图层 图层是用来在 ArcGIS 产品套件中显示地理数据集的机制.每个图层代表一种数据集(可以是地图服务.图形或是矢量数据),并指定该数据集是如何描绘使用一组属性的. 包含一个地图控件的每个应用 ...

  5. Matlab代码优化--向量化

    前段时间改写老师的一个计算纳米细颗粒物的C语言程序,不过运行的效率实在是太低了,工作站跑都很吃劲,晚上看了冈萨雷斯的数字图像处理意外发现了问题所在.在将C语言的程序改写成Matlab程序的时候我还是保 ...

  6. C++中的异常处理机制

    C++中的捕获异常机制catch参数中实参的类型不同,采取的处理方式则不相同,且与普通的函数调用还不一样,具体表现为当抛出异常throw A()或throw obj时,对象会进行一次额外的对象复制操作 ...

  7. Lua Coroutine详解

    协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西.线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程 ...

  8. Windows下安装openssl

    安装python类库cryptography1.6提示 build\temp.win-amd64-2.7\Release\_openssl.c(429): fatal error C1083: Can ...

  9. HTML meta 标签用法(转)

    meta主要为分HTTP标头信息(HTTP-EQUIV)和页面描述信息(NAME).标头信息包括文档类型.字符集.语言等浏览器正确显示网页的信息及处理动作:网页描述如内容的关键字.摘要.作者和定义ro ...

  10. C++的深拷贝与浅拷贝

    对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面是一个类对象拷贝的简单例子. #i ...