正则表达式是对字符串操作的⼀种逻辑公式. 我们⼀般使⽤正则表达式对字符串进⾏匹配和过滤.

使⽤正则的优缺点:
  优点: 灵活, 功能性强, 逻辑性强.
  缺点: 上⼿难. ⼀旦上⼿, 会爱上这个东⻄

⼯具: 各⼤⽂本编辑器⼀般都有正则匹配功能. 我们也可以去
http://tool.chinaz.com/regex/进⾏在线测试.

正则表达式由普通字符和元字符组成. 普通字符包含⼤⼩写字⺟, 数字.
元字符: 元字符才是正则表达式的灵魂. 元字符中的内容太多了, 在这⾥我们只介绍⼀些
常⽤的.

1. 字符组
字符组很简单⽤[]括起来. 在[]中出现的内容会被匹配. 例如:[abc] 匹配a或b或c
如果字符组中的内容过多还可以使⽤- , 例如: [a-z] 匹配a到z之间的所有字⺟ [0-9]
匹配所有阿拉伯数字
[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: 麻花藤昨天让英雄联盟关服了
reg: 麻花藤.*?
此时匹配的是 麻花藤 str: <div>胡辣汤</div>
reg: <.*>
结果: <div>胡辣汤</div> str: <div>胡辣汤</div>
reg: <.*?>
结果:
<div>
</div> str: <div>胡辣汤</div>
reg: <(div|/div*)?>
结果:
<div>
</div>

.*?x的特殊含义 找到下⼀个x为⽌.

str: abcdefgxhijklmn
reg: .*?x
结果:abcdefgx

5. 分组
在正则中使⽤()进⾏分组. 比如. 我们要匹配⼀个相对复杂的⾝份证号. ⾝份证号分
成两种. 老的⾝份证号有15位. 新的⾝份证号有18位. 并且新的⾝份证号结尾有可能是x.

给出以下正则:
^[1-9]\d{13,16}[0-9x]$ # 此方法有问题,16-17, 或第15位数字为X 均可能出现
^[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'就可以了.

*

\1 需要配合 ( ) 使用,表示() 中的内容,例如 s/\(abc\)/[\1]/ 表示将 "abc" 变成 "[abc]"
例如日期格式:

String REGEX_DATE="^\\d{4}(\\-|\\/|\\.)\\d{1,2}\\1\\d{1,2}$";

其中,\1表示第一个括号里的内容(注意:此处是匹配结果,不是正则表达式,比如括号中.匹配了m,则后面只能是m),以此类推,\2则可以表示第二个括号里的内容, ()可以套(),里面括号排序在后面

2,

^\d{6}.[\u2E80-\u9FFF]+$

匹配 110228 北京市密云县 这种形式

匹配空行 ^(\s*)\r\n

*

正则表达式练习

# 完成手机号匹配
reg: ^1[3-9]\d{9}$
# 以数字1开头,第二位是3-9之间的一个数字,后面取9位数字 # 完成网址的匹配
(https|http)://\w+\.\S+
# 以https或http://开头,数字字母下划线重复一次或更多次.除了\n以外的所有字符重复一次或更多次
((https|http|ftp|[a-zA-Z])://)?\w*\.[^\u4e00-\u9fa5| ]*
# 此处刨除中文 # 完成电话号匹配
^((010|02\d)-)?[1-9]\d{7}$
# 010或02加任意数字,区号可有可无,后面第一位1-9之间的数字,加7位数字
^(0[3-9]\d{2}-)?[1-9]\d{6,7}$
#0加 3-9之间的数字加两位数字,区号可有可无,后面第一位1-9之间的数字,加6-7位数字
^(\d{3}(\s|-))?\d{8}$|^(\d{4}(\s|-))?\d{7,8}$
# 3位区号-或空白,可有可无, # 匹配一个日期
^\d{4}-\d{2}-\d{2} # 匹配IP地址
^(2[0-4]\d|25[0-5]|1\d{2}|[1-9]\d|\d)\.(2[0-4]\d|25[0-5]|1\d{2}|[1-9]\d|\d)\.(2[0-4]\d|25[0-5]|1\d{2}|[1-9]\d|\d)\.(2[0-4]\d|25[0-5]|1\d{2}|[1-9]\d|\d) # 匹配家庭住址.
# xxxx市xxx区xxx街道xxx小区xxx号楼xxx单元xxx号
^\S+?市\S+?区\S+?街道\S+?小区\S+?号楼\S+?单元\S+?号$

正则表达式练习

Day24--Python--常用模块03--正则表达式的更多相关文章

  1. python常用模块二正则表达式

    正则表达式 常用的正则元字符 # =================================匹配模式================================= #一对一的匹配 # 'h ...

  2. python常用模块-调用系统命令模块(subprocess)

    python常用模块-调用系统命令模块(subprocess) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. subproces基本上就是为了取代os.system和os.spaw ...

  3. Python常用模块-时间模块(time&datetime)

    Python常用模块-时间模块(time & datetime) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.初始time模块 #!/usr/bin/env pyth ...

  4. python常用模块之xml模块

    python常用模块之xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,在json还没诞生的年代,大家都是使用xml,目前很多传统公司的系 ...

  5. python常用模块之shutil模块

    python常用模块之shutil模块 shutil模块,高级的文件.文件夹.压缩包处理模块 1.shutil.copyfile(src,des[,length]):将文件内容拷贝到另一个文件 In ...

  6. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  7. Python常用模块大全

    Python常用模块大全 os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有文件 os.c ...

  8. Python常用模块小结

    目录 Python常用模块小结 一.Python常用模块小结 1.1 time模块 1.2 datetime模块 1.3 random模块 1.4 os模块 1.5 sys模块 1.6 json模块 ...

  9. Python常用模块之sys

    Python常用模块之sys sys模块提供了一系列有关Python运行环境的变量和函数. 常见用法 sys.argv 可以用sys.argv获取当前正在执行的命令行参数的参数列表(list). 变量 ...

  10. Python常用模块中常用内置函数的具体介绍

    Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...

随机推荐

  1. python学习笔记(5)-time库的使用

    import time 一.时间获取函数 time(), ctime(),gmtime() >>> import time >>> time.time() 1524 ...

  2. 【Spring】——声明式事务配置详解

    项目中用到了spring的事务: @Transactional(rollbackFor = Exception.class, transactionManager = "zebraTrans ...

  3. 集合之HashMap(含JDK1.8源码分析)

    一.前言 之前的List,讲了ArrayList.LinkedList,反映的是两种思想: (1)ArrayList以数组形式实现,顺序插入.查找快,插入.删除较慢 (2)LinkedList以链表形 ...

  4. html5 表單屬性

    新的 form 属性: autocomplete novalidate 新的 input 属性: autocomplete autofocus form form overrides (formact ...

  5. mysql运行sql文件出错

    从服务器上备份表数据到本地,使用的工具是Navicat,右键表转储sql文件,但是在本地运行sql文件时一直报异常 [Err] 1064 - You have an error in your SQL ...

  6. html5 autoplay不起作用 Uncaught (in promise) DOMException: play() failed because the user didn't interac

    chrome://flags/#autoplay-policy

  7. 学习 Spring (十三) AOP 配置

    Spring入门篇 学习笔记 Spring 所有的切面和通知器都必须放在一个 内(可以配置包含多个 元素),每一个 可以包含 pointcut, advisor 和 aspect 元素(它们必须按照这 ...

  8. 吴恩达deeplearning之CNN—卷积神经网络

    https://blog.csdn.net/ice_actor/article/details/78648780 个人理解: 卷积计算的过程其实是将原始的全连接换成了卷积全连接,每个kernel为对应 ...

  9. 监听导航新增Tab选项卡-layui

    1. 加载element模块 2. 监听导航事件 3. 创建选项卡 //加载element模块 layui.use('element', function () { element = layui.e ...

  10. Tomcat服务的安装与配置

    介绍 百度百科 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开 ...