一、字符

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

\w 匹配字母数字或者下划线.

\s 匹配任意的空白符

\d 匹配数字

\n 匹配一个换行符

\t 匹配一个制表符

^ 匹配字符串的开始.

$ 匹配字符串的结尾.

\W 匹配非字母或者数字下划线

\D 匹配非数字

\S 匹配非空白符

a|b

()  匹配空号内的表达式 ,也表示一个组

[...]匹配字符组中的字符.

[^....] 匹配除了字符组中字符的所有字符.

量词 :

二、量词

* 重复零次或者更多次

+重复一次或者更多次

?重复零次或者一次

{n}重复n次

{n,}重复n次或者更多次

{n,m}重复n到m次

#* + ? { }实例:
import re
obj1=re.findall('李.?','李杰和李莲英和李二棍子')
print(obj1) #['李杰', '李莲', '李二'],?表示匹配0或者1次,即匹配李后面任意字符1次

obj2=re.findall('李.*','李杰和李莲英和李二棍子')
print(obj2) #['李杰和李莲英和李二棍子'],*表示匹配0次或者多次,即匹配李后面任意字符多次

obj3=re.findall('李.+','李杰和李莲英和李二棍子')
print(obj3) #['李杰和李莲英和李二棍子'],+表示匹配1次或者多次,即匹配李后面任意字符多次

obj3=re.findall('李.{1,2}','李杰和李莲英和李二棍子')
print(obj3) #['李杰和', '李莲英', '李二棍'],{1,2}表示匹配1到2次,即匹配李后面任意字符2次

非贪婪模式 用法说明
*? 
重复0次或更多次,但尽可能少重复
+?
重复1次或更多次,但尽可能少重复
?? 
重复0次或1次,但尽可能少重复
{n,}?
重复n次以上,但尽可能少重复
{n,m}?
重复n到m次,但尽可能少重复

import re
obj1=re.findall('李.??','李杰和李莲英和李二棍子')
print(obj1) #输出结果:['李', '李', '李']

obj2=re.findall('李.*?','李杰和李莲英和李二棍子')
print(obj2) #输出结果:['李', '李', '李']

obj3=re.findall('李.+?','李杰和李莲英和李二棍子')
print(obj3) #输出结果:['李杰', '李莲', '李二']

obj3=re.findall('李.{1,2}?','李杰和李莲英和李二棍子')
print(obj3) #输出结果:['李杰', '李莲', '李二']

import re
obj1=re.findall('李.??','李杰和李莲英和李二棍子')
print(obj1) #输出结果:['李', '李', '李']
obj2=re.findall('李.*?','李杰和李莲英和李二棍子')
print(obj2) #输出结果:['李', '李', '李']
obj3=re.findall('李.+?','李杰和李莲英和李二棍子')
print(obj3) #输出结果:['李杰', '李莲', '李二']
obj3=re.findall('李.{1,2}?','李杰和李莲英和李二棍子')
print(obj3) #输出结果:['李杰', '李莲', '李二']

4、字符集[]和[^]

 
import re
obj1=re.findall('李.[杰莲英二棍子]*','李杰和李莲英和李二棍子')
print(obj1) #输出结果:['李杰', '李莲英', '李二棍子']
obj2=re.findall('李.[^和]*','李杰和李莲英和李二棍子')
print(obj2) #输出结果:['李杰', '李莲英', '李二棍子'],表示匹配李后面不是和的任意字符
obj3=re.findall('[\d]','456bdha3')
print(obj3) #输出结果:['4', '5', '6', '3'],表示匹配任意一个数字
obj3=re.findall('[\d]+','456bdha3')
print(obj3) #输出结果:['456', '3'],表示匹配任意个数字

5、分组()与或|

 身份证号码是由15位或者18位的字符组成,如果是15位,首位不能是0,其他位数均为数字,如果是18位,则最后一位可能是数字或者X,用正则表达式匹配的两种方式如下:

正则表达式 结果说明
^[1-9]\d{14}(\d{2}[0-9x])?$
()表示分组,将\d{2}[0-9x]分成一组,就可以整体约束他们出现的次数为0-1次
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
表示先匹配[1-9]\d{16}[0-9x]如果没有匹配上就匹配[1-9]\d{14}

Day 18 正则表达式.的更多相关文章

  1. Java入门 - 语言基础 - 18.正则表达式

    原文地址:http://www.work100.net/training/java-regular-expression.html 更多教程:光束云 - 免费课程 正则表达式 序号 文内章节 视频 1 ...

  2. 【Unity|C#】基础篇(18)——正则表达式(Regex类)

    [学习资料] <C#图解教程>:https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.com/s/ ...

  3. 对Java中正则表达式的一些理解

    2016-12-11 22:26:18 正则表达式的意义:正则表达式是一个字符串处理工具,可以对字符串进行查找/提取/分割/替换等等,也可以对用户输入的内容进行匹配. 常用的预定义字符就不解释了,网上 ...

  4. js正则表达式和replace

    javascript中replace与正则表达式 replace()最简单的算是能力就是简单的字符替换.示例代码如下: <script language="javascript&quo ...

  5. ios 一个正则表达式测试(只可输入中文、字母和数字)

    一个正则表达式测试(只可输入中文.字母和数字) 在项目中碰到了正则表达式的运用,正则还是非常强大的,不管什么编程语言,基本上都可以用到.之前在用java时特别是对用户名或密码使用正则非常爽,写 脚本上 ...

  6. 关于JS正则表达式的一篇文章(转载)

    原文:http://www.cnblogs.com/xujh/archive/2008/08/21/1273525.html <input   onkeypress="return   ...

  7. 第十八天re模块和&#183;正则表达式

    1.斐波那契  # 问第n个斐波那契数是多少 def func(n): if n>2: return func(n-2)+func(n-1) else: return 1 num=int(inp ...

  8. PHP Fuzzing行动——源码审计

    目录: Section 1: 20种PHP源码快速审计方式  Section 2: PHP源码审计自动化( PHP Fuzzer )  风险级别: ■ Low ■ Medium ■ High   在开 ...

  9. python基础篇实战

    1. 判断下面的结果 # 1. 判断下面的结果 # 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 pri ...

随机推荐

  1. CentOS 7安装zabbix步骤

    Zabbix配置安装 1.前期准备: 我自己的基础环境:CentOS 7 + Mysql 5.6 可以根据官网介绍一步一步安装,官网地址:https://www.zabbix.com/ 图1: 然后点 ...

  2. php的静态化

    原理,将动态的页面,存储为静态的HTML静态页,使浏览器直接请求该静态页. 测试:一个PHP动态页面与一个静态页面所消耗的时间 一般可以使用apache自带的ab(apache bench)程序来测试 ...

  3. Castle ActiveRecord学习(三)数据映射及特性描述

    Model中的Demo: using Castle.ActiveRecord; using Castle.ActiveRecord.Queries; using System; using Syste ...

  4. 【转】MEF程序设计指南五:迟延(Lazy)加载导出部件(Export Part)与元数据(Metadata)

    MEF中使用导出与导入,实质上就是对一个对象的实例化的过程,通过MEF的特性降低了对象的直接依赖,从而让系统的设计达到一种高灵活.高扩展性的效果.在具体的设计开发中,存在着某些对象是不需要在系统运行或 ...

  5. python如何查看有哪些模块

    Question: 如何查看正则表达式模块re及其相关函数的意义 1.终端命令行下 python >> import sys >> sys.modules ########## ...

  6. tmux配置与用法整理

    tmux常用命令与快捷键 http://www.111cn.net/sys/linux/59058.htm http://www.360doc.com/content/13/0709/13/13047 ...

  7. 学习bn算法

    好处: 1.归一化后有什么好处呢?原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低: 2.另外一方面,一旦每批训练数据的分布各不相同(b ...

  8. 2018.07.13 [HNOI2015]落忆枫音(容斥原理+dp)

    洛谷的传送门 bzoj的传送门 题意简述:在DAG中增加一条有向边,然后询问新图中一共 有多少个不同的子图为"树形图". 解法:容斥原理+dp,先考虑没有环的情况,经过尝试不难发现 ...

  9. 程序员面试50题(1)—查找最小的k个元素[算法]

    题目:输入n个整数,输出其中最小的k个.例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. 分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数 ...

  10. 编写属于自己的linux命令

    开篇: 问题和解决思路 在使用一些基础IDE时,工具经常会在我们建立特定文件时给我们一个已经有了一些特定代码的模板文件,但是在linux开发时,没有这样的IDE,怎么办?虽然代码量不是很多,但是能一次 ...