模式匹配和正则表达式_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 ...
随机推荐
- 100天搞定机器学习|Day9-12 支持向量机
机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...
- Linux系统管理----账号与权限管理作业习题
1.创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) 创建目录:mkdir +目录 [root@localhost chen]#mkdir /guan ...
- android 基于wifi模块通信开发
这篇文章主要是我写完手机与wifi模块通信后所用来总结编写过程的文章,下面,我分几点来说一下编写的大概流程. 一.拉出按钮控件并设置它的点击事件 二.设置wifi权限 三.打开和关闭wifi 四.扫描 ...
- 第三章、Go-内建容器
3.1.数组 (1)数组的定义 package main import ( "fmt" ) func main() { //用var定义数组可以不用赋初值 var arr1 [5] ...
- containerd与kubernetes集成
kubernetes集群三步安装 概念介绍 cri (Container runtime interface) cri is a containerd plugin implementation of ...
- Windows to Linux API 映射
- 逆向破解之160个CrackMe —— 002-003
CrackMe —— 002 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- NS3中一些难以理解的常数
摘要:在NS3的学习中,PHY MAC中总有一些常数,需要理解才能修改.如帧间间隔等.那么,本文做个简单分析,帮助大家理解.针对802.11标准中MAC协议. void WifiMac::Conf ...
- 基于Starling的mask实现
作为一个从c++转过来的程序员,flash原生的自定义mask实在是太好用,能方便实现各种效果,比如新手引导的高亮.viewport效果等.可惜starling的显示对象并不支持mask特性,查阅go ...
- 基于RBAC的权限框架
RBAC权限框架(Role-Based Access Control)基于角色的权限访问控制的框架,通过用户-角色-权限的关联,非常方便的进行权限管理,在这里不再说明什么是RBAC,请自行百度. 谢谢 ...