博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
9月11日学习内容整理:正则表达式,re模块
阅读量:5855 次
发布时间:2019-06-19

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

一、正则表达式:正则是很大的一个知识点,不会仅仅是下面这些东西

1、概念:正则表达式就是一种对字符串匹配的规则,注意是只对字符串,正则表达式和python没啥关系,

2、表达式:

(1)字符集:用中括号表示,例如[1-9],[012345],[a-z1-9],[A-z]

字符集代表的是一个字符的匹配规则,不需写标点符号,可以多种规则连着写,按从小到大的排列(ascii值,所以大写A到小写z也可以,但一般不这么写)

(2)元字符

.     匹配除换行符以外的任意字符

\w    匹配数字字母和下划线的字符    大写代表非数字字母下划线的字符

\s  匹配空白符                大写代表非空白符的字符

\d    匹配数字   大写代表非数字的字符

^      匹配字符串的开始,写在开头     [ ^ ]  若写在字符集当中就代表除字符集中以外所有的字符 

$     匹配字符串的结尾,写在最后

(3)量词

*  零次或多次

+ 一次或多次

?零次或一次

{1}只有1次

{2,10}2到10次

{4,}4次或多次

规则:尽量匹配多次;量词只能操作前一个字符的次数。也就是说不会只对一个字符进行匹配就完了,而是将指定次数的匹配当作一次整体的匹配

(4)贪婪匹配:使用量词匹配,每次尽量匹配多次

    非贪婪匹配:在量词后加?,就是尽量匹配最少次

(5)分组:小括号;可以把一组字符当作一个整体,匹配这个整体也可以使用量词使这个整体重复匹配;对于一条匹配的正则,只对需要的内容进行分组

(6)转义符:\ 对于一些有特殊意义的字符用\可以表示本身,在python中用r转义

补充:

1、回溯算法:例如<.*?>  会一直匹配,当遇到>后不会停止会继续匹配,待匹配到最后还是没有>就会回头回到之前的>

2、.*?字符   取前面任意长度的字符,直到字符出现

二、re模块

1、和正则的关系:python中的re模块就是为正则服务的

2、方法

(1)findall(正则,要匹配的字符串)  输出的列表类型,元素为每一个匹配的字符串;若没有匹配上,就输出空列表

(2)search(正则,要匹配的字符串) 输出的是一种对象并不显示匹配的字符串,通常用group()来显示匹配上的字符串

例如:

import re

ret =  search(正则,字符串)

if   ret   :     若没有匹配上,则输出None

  print(ret.group() )   注意这里group只能显示第一个匹配上的字符串,若本身字符串很长有多个匹配项,但是group也只能显示出第一个

(3)match()  用法和search一样,但是,不同的是match会自动在正则前面加上^,代表以什么开头,所以group输出的值只能是字符串开始匹配上的字符

 

(4)分割 split(正则[ab],字符串)按照正则的规则依次分割,例如先匹配a后分割得到的结果再按b分割,最后输出的是列表

(5)替换 sub(正则,要替换的内容,字符串,次数) 按照正则匹配上的内容换成   要替换的内容   再输出替换好的字符串。次数是指替换几次,也就是替换前几个

(6)sunb()会直接显示输出替换的次数

 

(7)obj =  re.compile (正则)   将正则表达式编译为正则表达式对象,这样可以用来对多个字符串进行相同正则的匹配

(8)finditer(正则,字符串)  会直接输出一个迭代器,可循环取值,取值时要用group()

三、进阶知识

1、findall优先级查询:会优先显示分组即小括号里的匹配内容,而自动不显示括号外的匹配内容

解决办法:(?:.........      )   只要在小括号里的开头加上问号和冒号,注意一定不要分开

2、split 优先级查询:若在正则表达式两边加了括号,则分割时还会显示出原本要匹配的内容,例如上一节中的(4)给[ab]加括号([ab]),这样的话分割出来的内容也会有a和b

3、匹配标签:在search方法中,在要选择输出的正则规则前面加上?P<名字>,然后把正则规则用小括号括起来

import reret=re.search('<\w+>(?P
\w+)<\w+>','

hello

')print(ret.group('name'))

匹配标签

 若遇到字符串有重复的内容使我们需要的,不能每一次都写一个新的名字,只要在需要的正则位置两边加上括号,开头写?P=名字,而且括号里的正则也不需要留着

import reret=re.search('<(?P
\w+)>\w+<(?P=name)>','

hello

')print(ret.group('name'))

匹配标签2

 

转载于:https://www.cnblogs.com/wanghl1011/articles/7505429.html

你可能感兴趣的文章
HTML----列表
查看>>
笔记_网络单位换算
查看>>
百度上线新算法-绿萝算法
查看>>
SIEM期待实时安全分析
查看>>
SANS:2018年度事件响应调查报告
查看>>
利用百度翻译API做的在线翻译(python)
查看>>
php+ajax+json实现分页
查看>>
ios文件操作
查看>>
HTML5 之美:推荐9款优秀的 HTML5 音乐播放器
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
C语言打印100 ——200之间的素数
查看>>
tomcat7 的server.xml 里面 Connector 配置官方说明
查看>>
安装Ruby2.0
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
StringBuffer
查看>>
2017年6月8日 笔记
查看>>
ZStack--查询API
查看>>
IP地址规划
查看>>
vue.js component 学习手记
查看>>
openssl passwd 手动生成密码
查看>>