https://www.cnblogs.com/zhaof/p/6925674.html#4152933

https://www.cnblogs.com/lanyinhao/p/9165747.html

re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配。在直接使用字符串表示的正则表达式进行search,match和findall操作时,python会将字符串转换为正则表达式对象。而使用compile完成一次转换之后,在每次使用模式的时候就不用重复转换。当然,使用re.compile()函数进行转换后,re.search(pattern, string)的调用方式就转换为 pattern.search(string)的调用方式。

将正则表达式编译成正则表达式对象,方便复用该正则表达式

其中,后一种调用方式中,pattern是用compile创建的模式对象。如下:

>>> import re
>>> some_text = 'a,b,,,,c d'
>>> reObj = re.compile('[, ]+')
>>> reObj.split(some_text)
['a', 'b', 'c', 'd']
或者
content= """hello 12345 world_this
123 fan
""" pattern =re.compile("hello.*fan",re.S) result = re.match(pattern,content)
print(result)
print(result.group())

re.match 从头开始匹配  尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配的话,match()就会返回None

result.group()获取匹配的结果

如果为了匹配字符串中具体的目标,则需要通过()括起来

content= "hello 1234567 World_This is a regex Demo"
result = re.match('^hello\s(\d+)\sWorld.*Demo$',content)
print(result)
print(result.group())
print(result.group(1))
print(result.span())
结果
通过re.group()获得结果后,如果正则表达式中有括号,则re.group(1)获取的就是第一个括号中匹配的结果

<_sre.SRE_Match object; span=(0, 40), match='hello 1234567 World_This is a regex Demo'>
hello 1234567 World_This is a regex Demo
1234567
(0, 40)

result.span()获去匹配字符串的长度范围

compile()方法,这个方法可以将正则字符串编译成正则表达式对象,以便在后面的匹配中复用

re.match 从头开始匹配

re.search 匹配包含,但是找到一个就返回 
re.findall 把所有匹配到的字符放到以列表中的元素返回
前面我们介绍了search()方法的用法,它可以返回匹配正则表达式的第一个内容,但是如果想要获取匹配正则表达式的所有内容,那该怎么办呢?这时就要借助findall()方法了。该方法会搜索整个字符串,然后返回匹配正则表达式的所有内容。
re.splitall 以匹配到的字符当做列表分隔符
re.sub      匹配字符并替换

'.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行

'^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$'     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
'*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb''ab''a']
'+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab''abb']
'?'     匹配前一个字符1次或0
'{m}'   匹配前一个字符m次
'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb''ab''abb']
'|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
'(...)' 分组匹配,re.search("(abc){2}a(123|456)c""abcabca456c").group() 结果 abcabca456c
 
 
'\A'    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
'\Z'    匹配字符结尾,同$
'\d'    匹配数字0-9
'\D'    匹配非数字
'\w'    匹配[A-Za-z0-9]
'\W'    匹配非[A-Za-z0-9]
'\s'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
 
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)

M(MULTILINE): 多行模式,改变'^''$'的行为(参见上图)
S(DOTALL): 点任意匹配模式,改变'.'的行为
 
 

最新文章

  1. android二维码生成
  2. sublime运行c++快捷建修改
  3. 企业应用架构模式阅读笔记 - Martin Fowler
  4. [Angular 2] Using events and refs
  5. 使用DBUtils小框架
  6. 彻底删除&amp;quot;提示删除文件和目录&amp;quot;时出错的文件或目录
  7. 客户端登录验证 -- ESFramework 4.0 快速上手(15)
  8. ArrayList和LinkedList区别及性能测试
  9. SVN安装和使用(简单版)
  10. How To Size Your Apache Flink&#174; Cluster: A Back-of-the-Envelope Calculation
  11. .net 多线程之线程取消
  12. CentOS 部署.net core 2.0 项目
  13. 用ArcMap打开MXD文件报One or more layers failed to draw错误!
  14. linux内核分析实践二学习笔记
  15. 分享一下个人学PS的过程
  16. 使用js是想防止表单重复提交的效果
  17. Varint数值压缩算法
  18. js 判断图片是否加载完成(使用 onload 事件)
  19. opencv——pcb上寻找mark点(拟合椭圆的方法)
  20. 将字符串的编码格式转换为utf-8

热门文章

  1. springboot13 发布和监听事件
  2. 利用PHP实现登录与注册功能以及使用PHP读取mysql数据库——以表格形式显示数据
  3. mssql 创建函数简单实例
  4. ubuntu完全卸载mysql
  5. react踩坑记录——使用fetch获取json数据报错
  6. C - Alphabetic Removals
  7. mysql案例~非常规操作汇总
  8. 【多视图几何】TUM 课程 第5章 双视图重建:线性方法
  9. 将replicated数据与元数据关联
  10. OGG选择捕捉和应用模式