博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python正则
阅读量:7115 次
发布时间:2019-06-28

本文共 2345 字,大约阅读时间需要 7 分钟。

hot3.png

1、正则一般流程

#导入正则模块import re#编译正则模式对象regex = re.compile('string')#使用正则模式匹配字符串,返回字符串中第一次匹配模式的match对象m = regex.search(stringobject)print m.group()#match对象使用group方法获取匹配文本               #当模式中有()包含时,可以使用对应的数值参数精确提取(如 1,2,3等等)               #不传参数或0返回整个匹配文本print m.groups()#一次返回所有分组

 

2、正则常用模式

re.search(r'batman|spiderman',string) #使用管道符进行多项可能的匹配re.search(r'Bat(man|mobile|copter)',string)#使用管道符进行多项可能的匹配re.search(r'Bat(wo)?man',string) # 字符?表明它前面的分组是可选,出现0次或1次re.search(r'Bat(wo)*man',string) # 字符*表明它前面的分组是可选,出现0次或多(n=1,2...)次re.search(r'Bat(wo)+man',string) # 字符+表明它前面的分组是必选,出现1次或多(n=2,3...)次re.search(r'Bat(wo){m,n}man',string) # {}指定前面分组出现的次数,最少m次,最多n次#Python 的正则表达式默认是“ 贪心” 的, 这表示在有二义的情况下,它们会尽可能匹配最长的字符串。#请注意, 问号在正则表达式中可能有两种含义: 声明非贪心匹配或表示可选的分组。这两种含义是完全无关的re.search(r'Bat(wo){m,n}?man',string)#在花括号后方跟上?,变为非贪心模式,匹配符合条件的最短串#要让正则表达式不区分大小写,可以向 re.compile()传入 re.IGNORECASE 或 re.I,作为第二个参数regex = re.compile(r'WeRwT',re.I)

 

3、findall()

  •  如果调用在一个没有分组的正则表达式上, 例如\d\d\d-\d\d\d-\d\d\d\d, 方法findall()将返回一个匹配字符串的列表, 例如['415-555-9999', '212-555-0000']。
  • 如果调用在一个有分组的正则表达式上, 例如(\d\d\d)-(\d\d\d)-(\d\d\d\d), 方法 findall()将返回一个字符串的元组的列表 ( 每个分组对应一个字符串),例如[('415','555', '1122'), ('212', '555', '0000')]。

4、字符分类集合

  • \w 任何字母、数字或下划线字符(可以认为是匹配“单词”字符)
  • \W 除字母、数字和下划线以外的任何字符
  • \s 空格、制表符或换行符(可以认为是匹配“空白”字符)
  • \S 除空格、制表符和换行符以外的任何字符
  • \d 数字0-9
  • \D 非数字,即[^\d]
  • 自定义字符集[aeiouAEIOU],使用中括号包含。
     

5、通配符 "." :

默认匹配除换行以外的所有字符,通过传入 re.DOTALL 作为 re.compile()的第二个参数, 可以让句点字符匹配所有字符, 包括换行字符。

noNewlineRegex = re.compile('.*')noNewlineRegex.search('Serve the public trust.\nProtect the innocent\nUphold the law.').group()#'Serve the public trust.'newlineRegex = re.compile('.*', re.DOTALL)newlineRegex.search('Serve the public trust.\nProtect the innocent\nUphold the law.').group()#'Serve the public trust.\nProtect the innocent.\nUphold the law.'

 

6、使用sub()方法替换字符串

有时候,你可能需要使用匹配的文本本身,作为替换的一部分。在 sub()的第一个参数中,可以输入\1、 \2、 \3……,表示“在替换中输入分组 1、 2、 3……的文本”。

namesRegex = re.compile(r'Agent \w+')namesRegex.sub('CENSORED', 'Agent Alice gave the secret documents to Agent Bob.')#'CENSORED gave the secret documents to CENSORED.agentNamesRegex = re.compile(r'Agent (\w)\w*')agentNamesRegex.sub(r'\1****', 'Agent Alice told Agent Carol that Agent Eve knew Agent Bob \                      was a double agent.')#A**** told C**** that E**** knew B**** was a double agent.'

 

转载于:https://my.oschina.net/u/2440318/blog/842789

你可能感兴趣的文章
【坐在马桶上看算法】算法4:队列——解密QQ号
查看>>
Linux创建/删除/修改/密码/ 用户知识学习
查看>>
H264 RTP负载格式
查看>>
HTTP协议详解
查看>>
非初始化和非法的指针
查看>>
RHEL 5服务篇—部署DNS域名解析服务(三)搭建主从域名解析服务器
查看>>
Go程序执行顺序
查看>>
2013年最后2个月的学习目标(计划)
查看>>
Java如何解析某个目录下xml文件,将XML文件转换为报表数据源?
查看>>
Kubelet Deivce Manager源码分析
查看>>
JAVA中的集合类Map、Set、List
查看>>
apache日志分析
查看>>
安装Apache2.4出现的问题
查看>>
便携无线路由器PW2880
查看>>
alternatives命令用法
查看>>
ASP.NET MVC 3 网站优化总结(六)压缩 HTML
查看>>
我的友情链接
查看>>
拥抱阳光下的产业--光伏新技术、新产品、新工艺发布会顺利召开
查看>>
我的友情链接
查看>>
要考虑
查看>>