day021python 正则表达式
正则表达式是由普通字符和元字符组成,
普通字符包含大小写字母, 数字. 在匹配普通字符 的时候我们直接写就可以了. 比如"abc" 匹配的就是"abc".
元字符: 元字符才是正则表达式的灵魂. 元字符中的内容太多了, 在这里我们只介绍一些 常用的
主要内容:
- 字符组
- 简单元字符
- 量词
- 惰性匹配和贪婪匹配
- 分组
- 转义
- 字符组:
字符组用[]方括号括起来.在[]中出现的内容会被分配.例如:[zbc]匹配a或b或c
如果字符组中的内容过多换可以使用-,例子:[a-zA-Z0-9] :匹配所有的大写小写还有数字
2. 简单的元字符(常用)
. 匹配除换行以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配所有任意字符(包括换行)
\d 匹配数字
\n 匹配一个换行符
\t 匹配一个制表符
\b 匹配一个单词的结尾
^ 匹配字符串的开始
$ 匹配字符串的的结尾
\W 匹配非字母或数字或下划线
\D 匹配非数字
\S 匹配非空白符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示一个组
[...] 匹配字符组中的字符
[^...] 匹配除了字符组中的字符的所有字符
3. 量词 (我们目前匹配的所有内容都是单一文字符号,那如何一次性匹配很多个字符呢)
* 重复零次或者更多次
+ 重复一次或者更多次
? 重复零次或者一次
{n} 重复n次
{n,} 重复n次或者更多次
{n,m} 重复n到m次
4. 惰性匹配和贪婪匹配
在量词中的 *, +,{} 都属于贪婪匹配.就是尽可能多的匹配到结果
在使用 .* 后面加了? 则是尽可能的少匹配,表示惰性匹配
str: 麻花藤昨天让英雄联盟关服了
reg: 麻花藤.*? ## *重复零次或更多次
此时匹配的是 麻花藤 # ? 重复零次或一次 str: <div>胡辣汤</div> # . 匹配除换行以外的任意字符
reg: <.*>
结果:
<div>胡辣汤</div> str: <div>胡辣汤</div>
reg: <.*?>
结果:
<div>
</div>
.*?x的特殊含义 找到下一个x为止
str: abcdefgxhijklmn
reg: .*?x
结果:abcdefgx
5. 分组
在正则中使用()进行分组. 比如. 我们要匹配⼀个相对复杂的身份证号. 身份证号分 成两种. 老的身份证号有15位. 新的身份证号有18位. 并且新的身份证号结尾有可能是x
给出以下正则: ^[1-9]\d{13,16}[0-9x]$
^[1-9]\d{14}(\d{2}[0-9x])?$
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
6 . 转义
在正则表达式中, 有很多有特殊意义的是元字符, 比如\n和\s等,如果要在正则中匹 配正常的"\n"⽽而不是"换行符"就需要对"\"进行转义, 变成'\\'.在python中, 无论是正则表达式, 还 是待匹配的内容, 都是以字符串的形式出现的, 在字符串中\也有特殊的含义, 本身还需要转 义. 所以如果匹配一次"\n", 字符串中要写成'\\n', 那么正则里就要写成"\\\\n",这样就太麻烦了. 这个时候我们就用到了r'\n'这个概念, 此时的正则是r'\\n'就可以了.
最新文章
- XML数据的解析
- 解决win8 下 eclipse 中文字体太小的问题
- 怎样学习Java
- DECLARE_GLOBAL_DATA_PTR宏定义问题
- 用PyAIML开发简单的对话机器人
- ___security_cookie机制,防止栈溢出
- API 进程、线程函数
- 仿照淘宝首页做的一个高度伪对齐demo
- redis数据库操作的C++简单封装
- 使用c语言实现linux数据库的操作
- jsp中一个标签两种方式绑定两个click事件导致未执行的问题
- python的生成器(斐波拉契数列(Fibonacci))
- mybatis 注解形式设置批量新增、批量更新数据
- WMS接口平台配置培训
- CSS的显示模式
- leecode第二十一题(合并两个有序链表)
- python2.7 目录下没有scripts
- springboot 前后端分离项目跨域配置
- Linux之查看CPU
- PPT怎么母版怎么修改及应用