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

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

⼯具: 各⼤⽂本编辑器⼀般都有正则匹配功能. 我们也可以去
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. 解决mybatis generator警告Cannot obtain primary key information from the database, generated objects may be incomplete

    使用 mybatis generator 生成pojo.dao.mapper时 经常出现 Cannot obtain primary key information from the database ...

  2. sqlserver数据库性能测试方法

    测试计划-添加jdbc jar 地址(数据驱动) jdbc configuration 地址 jdbc:sqlserver://127.0.0.1:1433;databasename=XSData j ...

  3. 根据request获取请求客户端的外网ip

    //根据request获取外网ip private static String getRemoteIp(HttpServletRequest request) { //x-forwarded-for: ...

  4. 一、MyCat的搭建

    一.什么是mycat 简单直接点就是,MyCat其实就是一个数据库的中间件!一般我们都是app直接到数据库!有了MyCat以后,就是app到MyCat然后再访问数据库. mycat是个中间件,它负责连 ...

  5. redis.clients.jedis.exceptions.JedisDataException :READONLY You can't write

    分布式直连同步调用测试时出现的错误:主从复制架构下,默认Slave是只读的,如果写入则会报错: redis.clients.jedis.exceptions.JedisDataException: R ...

  6. 文件上传.ashx

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime ...

  7. How to enable AHCI on Windows7

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci

  8. gauss——seidel迭代

    转载:https://blog.csdn.net/wangxiaojun911/article/details/6890282 Gauss–Seidelmethod 对应于形如Ax = b的方程(A为 ...

  9. 动态追加js

    判断是否已引用js,如果没有会引发异常,在异常时添加引用 try { if (layui) {} } catch (ex) { var s = document.createElement('scri ...

  10. 我踩过的Alwayson的坑!

    最近被sql server Alwayson高可用组和读写分离,弄得神魂颠倒,身心俱疲.遇到了下面一些问题,提醒自己也给后来人做些记录. EntityFramework支不支持Alwayson? 起因 ...