一、正则式表达式语法
正则表达式是一种用来匹配字符串的强有力的武器,设计思想是一种描述性的语言来给字符串定义一个规则,烦死符合规则的字符串,就认为它匹配,否则不匹配
行定位符:用来描述字符串的边界
^:表示行的开始 $:表示行的结尾
eg:^tm #表示要匹配字符串tm的开始位置是行头
tm^ #表示要匹配字符串tm的开始位置是行尾
tm: #表示要匹配字符串tm的开始位置是任意位置
元字符:指在正则表达式中具有特殊意义的专用字符(如:^、$)
. :匹配除换行以外的任意字符 \w:匹配字母或数字或下划线或汉字
\s:匹配任意的空白符 \d:匹配数字
\b:匹配单词的开始或结束 ^:匹配任意字符串的开始
$:匹配字符串的结束
限定符(重复):限制匹配数量
eg:^\d{8}$ #匹配8位数的QQ号
?:匹配前面的字符零次或一次 colou?r #可匹配color或colour
+:匹配前面的字符一次或多次 go+gle #可匹配gogle到goo…gle
*:匹配前面的字符零次或多次 go*gle #可匹配ggle到goo…gle
{n}:匹配前面的字符n次 go{2}gle #可匹配google
{n,}:匹配前面字符最少n次 go{2,}gle #可匹配google到goo…gle
{n,m}:匹配前面字符最少n次最多m次 go{0,2}gle #可匹配ggle、gogle、google
字符类:定义一个字符集合,匹配集合中的字符,使用[]表示(主要针对没有预定义元字符集合)
[0-9] #等同于\d,匹配数字 [a-z0-9A-Z] #(只考虑英文时)等同于\w
[aeiuo] #匹配英文元音字母 [.?!] #匹配标点符号“.”“?”“!”
排除字符:匹配不符合指定字符集合的字符串(用^表示,但在[]中使用)
[^a-zA-Z] #不是字母的集合
选择字符:用来表示匹配一个集合或另一个集合(用|表示)
[a-z]|[0-9] #匹配a-z或0-9的字符
(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$
#表示15位纯数字或18位纯数字或者前17位纯数字最后一位位为X或x
转义字符:使用\表示,把一个特殊字符转义成普通字符,“()”在正则表达式中也算是一个元字符
分组(子表达式):使用()表示
()可以改变限定字符的作用范围
(thir|four)th #表示可以匹配thirth或fourth
()可以分组
(\.[0-9]{1,3}){3} #就是对分组(\.[0-9]{1,3})进行重复三次操作
正则表达式语法:
使用正则表达式时,时将其作为模式字符串使用的(模式字符串中的\等符号需要转义)
'[a-zA-Z]' #匹配不是字母的字符
'\\bm\\w*\\b' #匹配以m开头的单词(其中一个\为转义字符)
模式字符串中含有大量特殊字符串时,可以使用原生字符串表示(在模式字符串前加R或r)
r'\bm\w*\b' #等同于'\\bm\\w*\\b'的效果,匹配以m开头的单词
在编写模式字符串时,并不是所有的反斜杠都需要转换,^\d{8}$就不需要,因为\d没有特殊意义,为了书写方便,一般使用原生字符串表示
二、使用re模块实现正则表达式操作
re模块的compile()方法将模式字符串转换成正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串,使用re模块时,需要先用import导入(import re)
匹配字符串:使用re模块提供的match()、search()和findall()方法
    • 使用match()方法匹配:用于从字符串的开始处进行匹配(起始位置匹配成功,则显示match对象,否则显示None)
re.match(pattern,string,[flags])
pattern:表示模式字符串,由要匹配的正则表达式转换而来
string:表示要匹配的字符串
flags:可选参数,表示标志位,用于控制匹配方式(如是否区分大小写)
常用标志位
            • A或ASCII:对于\w、\W、\b、\B、\D、\d、\s、\S只进行ASCII匹配(仅Python3中)
            • I或IGNORECASE:执行不区分字母大小写的匹配
            • M或MULTILINE:将^或$用于包括整个字符串的开始和结尾的每一行(默认仅适用于整个字符串的开始处和结尾处)
            • S或DOTALL:使用“.”字符匹配所有字符,包括换行符
            • X或VERBOSE:忽略模式字符串中未转义的空格和注释
eg:import re
a = r'mr_\w+'
b = 'MR_SHOP mr_shop'
c = re.match(a,b,re.I)
print(c,"\n")
d = '项目名称 MR_SHOP mr_shop'
c = re.match(a,d,re.I)
print(c)
匹配以mr_开头,不区分字母大小写的字符串
    • 使用search()方法匹配:在整个字符串中搜索第一个匹配的值,如起始位置匹配成功,则显示match对象,否则显示None
re.search(pattern,string,[flags])
eg:a = r'mr_\w+'
b = 'MR_SHOP mr_shop'
c = re.search(a,b,re.I)
print(c,"\n")
d = '项目名称 MR_SHOP mr_shop'
c = re.search(a,d,re.I)
print(c)
    • 使用findall()方法匹配:在整个字符串中搜索所有复核正则表达式的字符串,并以列表形式返回,匹配成功者返回包含匹配结构的列表,否则返回空列表
re.findall(pattern,string,[flags])
eg:import re
a = r'mr_\w+
b = 'MR_SHOP mr_shop'
c = re.findall(a,b)
print(c,"\n")
d = '项目名称 MR_SHOP mr_shop'
c = re.findall(a,d,re.I)
print(c)
注:在指定的模式字符串中包含分组时,则返回与分组匹配的文本列表(要想获取整个模式字符串的匹配,可以将整个模式字符串用()进行分组,然后再获取结果时,只取返回值列表的每个元素(返回元组)的第一个元素
eg:import re
a = r'[1-9]{1,3}(\.[0-9]{1,3}){3}'
b = '127.0.0.1 192.168.1.66'
c = re.findall(a,b)
print(c)
eg:import re
a = r'([1-9]{1,3}(\.[0-9]{1,3}){3})'
b = '127.0.0.1 192.168.1.66'
c = re.findall(a,b)
for d in c:
print(d[0])
替换字符串:sub()方法
re.sub(pattern,repl,string,count,flags)
pattern:表示模式字符串
repl:表示替换的字符串
string:表示要被查找替换的原始字符串
count:可选参数,表示模式匹配后替换的最大次数,默认为0,表示替换所有的匹配
flags:可选参数,表示标志位,用于控制匹配方式
eg:import re
a = r'1[34578]\d{9}' #定义11位手机号码的模式字符串
b = '中奖号码为:84978981,联系电话为13611111111'
print(re.sub(a,'1XXXXXXXXXXX',b))
使用正则表达式分割字符串:根据正则表达式分割字符,并以列表形式返回;split()方法
re.split((pattern,string,[maxsplit],[flags]))
pattern:模式字符串,有要匹配的正则表达式转换而来
string:要匹配的字符
maxslip:可选参数,表示最大的拆分次数
flags:可选参数,表示标志位
eg:import re
a = r'[?|&]'
url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv'
print(re.split(a,url))

七、Python-正则表达式的更多相关文章

  1. Python爬虫入门七之正则表达式

    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...

  2. 转 Python爬虫入门七之正则表达式

    静觅 » Python爬虫入门七之正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串 ...

  3. Python正则表达式的七个使用范例-乾颐堂

    作为一个概念而言,正则表达式对于Python来说并不是独有的.但是,Python中的正则表达式在实际使用过程中还是有一些细小的差别. 本文是一系列关于Python正则表达式文章的其中一部分.在这个系列 ...

  4. Python正则表达式初识(七)

    继续分享Python正则表达式的基础知识,今天给大家分享的特殊字符是“\s”.“\S”,具体的教程如下. 1.“\s”代表的意思是匹配空格,匹配模式“加\s油”代表的是字符“加”和“油”之间有空格的意 ...

  5. Python正则表达式的七个使用范例

    本文由 伯乐在线 - 左手的灵魂 翻译.未经许可,禁止转载!英文出处:thegeekstuff.欢迎加入翻译组.http://blog.jobbole.com/74844/ 作为一个概念而言,正则表达 ...

  6. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  7. python正则表达式 小例几则

    会用到的语法 正则字符 释义 举例 + 前面元素至少出现一次 ab+:ab.abbbb 等 * 前面元素出现0次或多次 ab*:a.ab.abb 等 ? 匹配前面的一次或0次 Ab?: A.Ab 等 ...

  8. Python 正则表达式学习

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2, ...

  9. python正则表达式-re模块

    目录: 一.正则函数 二.re模块调用 三.贪婪模式 四.分组 五.正则表达式修饰符 六.正则表达式模式 七.常见的正则表达式 导读: 想要使用python的正则表达式功能就需要调用re模块,re模块 ...

  10. Python正则表达式初识(十)附正则表达式总结

    今天分享正则表达式最后一个特殊字符“\d”,具体的教程如下. 1.特殊字符“\d”十分常用,其代表的意思是数字.代码演示如下图所示. 其中“+”的意思是表示连续,在这里代表的意思是连续的数字.但是输出 ...

随机推荐

  1. 使用Angular cli创建组件报错: Unexpected token / in JSON at position....

    之前为了熟悉流程一直都是手动创建组件,今天试着用cli创建组件,居然报错了,报错大致为: Unexpected token / in JSON at position.... ,并且错误指向了.ang ...

  2. 使用 ReSharper,输入即遵循 StyleCop 的代码格式化规范

    使用 ReSharper,输入即遵循 StyleCop 的代码格式化规范 StyleCop 可以帮助强制执行代码格式化规范,ReSharper 可以帮助你更高效地编写代码.把两者结合起来,你便能高效地 ...

  3. CentOS 7安全加固

    本次实验使用的centos 7 版本 一.查找系统中是否存在空密码账户 1.使用命令: awk -F: '($2==""){print $1}' /etc/shadow 直接查看. ...

  4. 【bug记录】OS Lab4 踩坑记

    OS Lab4 踩坑记 Lab4在之前Lab3的基础上,增加了系统调用,难度增加了很多.而且加上注释不详细,开玩笑的指导书,自己做起来困难较大.也遇到了大大小小的bug,调试了一整天. 本文记录笔者在 ...

  5. 学习笔记CB010:递归神经网络、LSTM、自动抓取字幕

    递归神经网络可存储记忆神经网络,LSTM是其中一种,在NLP领域应用效果不错. 递归神经网络(RNN),时间递归神经网络(recurrent neural network),结构递归神经网络(recu ...

  6. linux 终端颜色代码

    echo -e "\033[背景;字体颜色m 字符串\033[0m" eg : echo -e "\033[30m 黑色字 \033[0m"   字体颜色(30 ...

  7. maya_help()验证编程过程中模块导入的情况

    import rigLib reload(rigLib.base.control)spine = rigLib.base.control.Control( prefix = 'spine1') hel ...

  8. Docker系列(二)镜像下载、操作容器、镜像导入导出等操作

    一.镜像操作 列出镜像 $sudo docker images 从dockerhub检索image $docker search image_name 下载image $docker pull ima ...

  9. activiti 任务监听参数的配置

    public class TaskListenersImp implements TaskListener { private Expression level; private Expression ...

  10. Linux中KVM桥接的配置

    Linux中KVM桥接的配置 1. 原理 1.1 说明 在安装一个拥有虚拟化功能的Linux操作系统(此处以CentOS为例),一般我们有两种方法: .在光盘安装的时候安装好虚拟化包或者PXE服务器上 ...