模式匹配和正则表达式_python
模式匹配和正则表达式的学习
python实现
正则表达式
其对文字处理有着超高的效率
利用正则表达式可以实现“三步解决一个问题”
步骤
- 1.用 import re 导入正则表达式模块。
- 2.用 re.compile()函数创建一个 Regex 对象(记得使用原始字符串)。
- 3.向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象。
- 4.调用 Match 对象的 group()方法,返回实际匹配文本的字符串。
正则表达式-regex
import re
# first step , write a expected module
phoneNumRegex=re.complie(r'\d\d\d-\d\d\d-\d\d\d\d')
# second step ,input the the string
mo=phoneNumRegex.search('my phone number is : 123-456-1123')
# third step ,output the group result
print('phone number found:'+mo.group())
其中 正则表达式的编写前 加一个r,是用来表示是原始字符串,不包括转义字符
use group separate the item
phoneNumRegex2=re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
mo2=phoneNumRegex2.search('my phone numer is:345-232-4556')
print('mo2.group(1):'+mo2.group(1))
print('mo2.group(2):'+mo2.group(2))
print("mo2.group(0):"+mo2.group(0))
print('mo2.group():'+mo2.group())
print(mo2.groups())
如果想匹配 ()括号在字符串中,使用'\(' ,'\)' 转义字符来实现
# explain ,if need () in regex use '\('
# use | pipeline match more than one string
heroRegex=re.compile(r'dengshuo|zhengchuan')
mo3=heroRegex.search('dengshuo orginal name is deng zhengchuan')
mo4=heroRegex.search('deng zhengchuan is dengshuo')
print(mo3.group()) # | just like or ,return the first match group
print(mo4.group()) # can use findall() match all group
# use ? implement optinal match ,? partment 0 or 1 times
batRgex=re.compile(r'Bat(wo)?man')
mo5=batRgex.search('dengshuo is a Batman')
mo6=batRgex.search('a woman can be a Batwoman')
print(mo5.group())
print(mo6.group())
# use * 0, 1 or many times
# use + ,1 or many times
batRgex=re.compile(r'Bat(wo)*man') # can get Batman
batRgex=re.compile(r'Bat(wo)+man') # can't get Batman
# use (wo){} match special number
batRgex=re.compile(r'Bat(wo){2}man') # only match Batwowoman
batRgex=re.compile(r'Bat(wo){3,5}man') # can match Batwowowoman Batwowowowoman Batwowowowowoman
匹配多个相同字符时,默认是贪心的
greedyHaRegex = re.compile(r'(Ha){3,5}') # 贪心策略
mo1 = greedyHaRegex.search('HaHaHaHaHa')
mo1.group()
## 'HaHaHaHaHa'
nongreedyHaRegex = re.compile(r'(Ha){3,5}?') # 非贪心
mo2 = nongreedyHaRegex.search('HaHaHaHaHa')
mo2.group()
## 'HaHaHa'
findall()
- 1.如果调用在一个没有分组的正则表达式上
例如\d\d\d-\d\d\d-\d\d\d\d,方法 findall()将返回一个匹配字符串的列表,例如['415-555-9999', '212-555-0000']。
- 2.如果调用在一个有分组的正则表达式上
例如(\d\d\d)-(\d\d\d)-(\d\d\d\d),方 法 findall()将返回一个字符串的元组的列表(每个分组对应一个字符串),例如[('415', '555', '1122'), ('212', '555', '0000')]。
自定义字符分类
\d 数字
\D 非数字
\w 字母,数字,下划线
\W 非(字母,数字,下划线)
\s 空格,制表符,换行符
\S ^()
^ 必须以什么字符串开始
$ 必须以什么字符串结束
. 通配符
* 重复字符
.* 可以用来匹配除去换行符外的所有字符
re.complie(r'[aeiouAEIOU]')
当然还有反向选择
re.complie(r'[^aeiouAEIOU]')
不区分大小写
complile的参数
re.complie(r' ',re.I) 或者 re.complie(r' ',re.IGNORECASE) 输入第二参数进行限定
快速检索
- ?匹配零次或一次前面的分组。
- *匹配零次或多次前面的分组。
- +匹配一次或多次前面的分组。
- {n}匹配 n 次前面的分组。
- {n,}匹配 n 次或更多前面的分组。
- {,m}匹配零次到 m 次前面的分组。
- {n,m}匹配至少 n 次、至多 m 次前面的分组。
- {n,m}?或*?或+?对前面的分组进行非贪心匹配。
- ^spam 意味着字符串必须以 spam 开始。
- spam$意味着字符串必须以 spam 结束。
- .匹配所有字符,换行符除外。
- \d、\w 和\s 分别匹配数字、单词和空格。
- \D、\W 和\S 分别匹配出数字、单词和空格外的所有字符。
- [abc]匹配方括号内的任意字符(诸如 a、b 或 c)。
- [^abc]匹配不在方括号内的任意字符。
sub()方法替换字符串
找到目标字符出进行替换,输入两个参数 。第一个是要替换的参数,第二个是要被替换的参数
import re
namesRegex=re.compile(r'Agent \w+') # 到空格结束
namesRegex.sub('CENSOND','Agent Alice gave the number in the sentence')
# CENSOND Agent Alice gave the number in the sentence
模式匹配和正则表达式_python的更多相关文章
- re模块:模式匹配与正则表达式
一.用正则表达式查找文本模式 正则表达式,简称regex,是文本模式的描述方法.比如\d是一个正则表达式,用于表示一位0~9的数字.在一个模式后面加上花括号包围的数字n(如{n}),表示匹配这个模式n ...
- C# 7.0 新特性3: 模式匹配
本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...
- grep与正则表达式,grep、egrep和fgrep
grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串. ...
- 黑马程序员:Java基础总结----正则表达式
黑马程序员:Java基础总结 正则表达式 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import java.util.regex.*; 符合一定规 ...
- nginx 正则表达式
1.nginx配置基础 1.正则表达式匹配 ~ 区分大小写匹配 ~* 不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 ^ 以什么开头的匹配 $ 以什么结尾的匹配 转义字符.可 ...
- 利用正则表达式实现python强口令检测
""" Chapter 7 模式匹配和正则表达式 1 用import re 导入正则表达式模块 2 用re.compile()函数创建一个Regex对象(记得使用原始字符 ...
- Python与正则表达式[0] -> re 模块的正则表达式匹配
正则表达式 / Regular Expression 目录 正则表达式模式 re 模块简介 使用正则表达式进行匹配 正则表达式RE(Regular Expression, Regexp, Regex) ...
- python 爬虫之-- 正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. 正则表达式非python独有,python 提供了正则表达式的接口,re模块 一.正则匹配字符简介 模式 描述 \d ...
- 恭喜你,Get到一份 正则表达式 食用指南
先赞后看,养成习惯 前言 正则表达式 正则表达式: 定义一个搜索模式的字符串. 正则表达式可以用于搜索.编辑和操作文本. 正则对文本的分析或修改过程为:首先正则表达式应用的是文本字符串(text/st ...
随机推荐
- Linux进程间通信——信号
一.认识信号 信号(Signals)是Unix.类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式.它是一种异步的通知机制,用来提醒进程一个事件已经发生.当一个信号发送给一个进程 ...
- strus 上传文件
(1) action代码 package comSys.struts.articleManager; import java.io.File; import java.io.FileInputStre ...
- mysql新建用户及授权
添加用户 CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; -- username : 自定义用户名 -- localhost ...
- iView 实现可编辑表格
create at: 2019-02-20 组件 <i-table highlight-row ref="currentRowTable" :columns="co ...
- JavaWeb——使用会话维持状态2
在这次的例子里面,将完成一类似购物车的功能,在客户访问网站的时候,会选中自己将要购买的商品,而购物车将始终维持着商品的状态,会话将联系起选择第一个商品(第一个请求),选择其他商品(其他请求)以及付款等 ...
- 基于 Lerna 管理 packages 的 Monorepo 项目最佳实践
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/NlOn7er0ixY1HO40dq5Gag作者:孔垂亮 目录 一.背景二.Monorepo vs M ...
- netty源码解解析(4.0)-18 ChannelHandler: codec--编解码框架
编解码框架和一些常用的实现位于io.netty.handler.codec包中. 编解码框架包含两部分:Byte流和特定类型数据之间的编解码,也叫序列化和反序列化.不类型数据之间的转换. 下图是编解码 ...
- docker学习1:docker前世今生
Docker简介 Docker是2013发起的一个项目,早在2013年,Docker自诞生起,就是整个技术界的明星项目,当时我还在上海实习,就在各种技术媒体上看到了Docker的介绍文章,很多技术媒体 ...
- Java中访问修饰符public、private、protecte、default
Java中访问修饰符public.private.protecte.default的意义讲解:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不 仅 ...
- Linux查找命令对比(find、locate、whereis、which、type、grep)
//太长不看版find查找磁盘空间,相较于locate和whereis速度较慢.find和locate的查找单位为文件或者目录,locate其实是find -name的另一种写法.locate和whe ...