常用模块--- 正则模块 正则表达式 re 模块

# 正则模块# 正则表达式# re模块
#--------------------------------------- time -----------------------------------------# 计算时间差# 做时间格式的转换

# 所有的模块要经历的两个步骤    # 要操作的概念本身  : 正则表达式  时间    # 使用模块去操作它  : re         time

# 学习 正则表达式 本身    # 什么是正则表达式        # 一种匹配字符串的规则        # input 一串数据 :            # 是不是qq号码 : 全数字 5位以上 12位一下,第一位不是零            # 是不是身份证号 : 18位/15位 第一位不是零 18位的最后一位可能是x或者数字        # 有一个文件            # 要你把这个文件中所有的手机号都摘取出来    # 正则表达式能做什么        # 可以定制一个规则,            #1. 来确认某一个字符串是否符合规则            #2. 从大段的字符串中找到符合规则的内容        # 程序领域            # 1.登录注册页的表单验证 web开发 要求简单语法            # 2.爬虫                # 爬虫 把这个网页下载下来 从里面提取一些信息,找到我要的所有信息,做数据分析            # 3.自动化开发 日志分析# 什么是正则表达式 : 一种匹配字符串的规则

# 明确一件事:    # 正则表达式是一种独立的语法    # 和python没关系

# 要先学习正则的语法# 再学习使用python来操作正则

# 帮助学习的工具 http://tool.chinaz.com/regex/
元字符
匹配内容
匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\n 匹配一个换行符
\t 匹配一个制表符
\b 匹配一个单词的结尾
^ 匹配字符串的开始
$ 匹配字符串的结尾
\W
匹配非字母或数字或下划线
\D
匹配非数字
\S
匹配非空白符
a|b
匹配字符a或字符b
()
匹配括号内的表达式,也表示一个组
[...]
匹配字符组中的字符
[^...]
匹配除了字符组中字符的所有字符

量词:

量词
用法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

. ^ $

正则 待匹配字符 匹配
结果
说明
海. 海燕海娇海东 海燕海娇海东  
匹配所有"海."的字符
^海. 海燕海娇海东 海燕 只从开头匹配"海."
 
海.$
 
海燕海娇海东
海东 只匹配结尾的"海.$"

. ^ $

正则 待匹配字符 匹配
结果
说明
海. 海燕海娇海东 海燕海娇海东  
匹配所有"海."的字符
^海. 海燕海娇海东 海燕 只从开头匹配"海."
 
海.$
 
海燕海娇海东
海东 只匹配结尾的"海.$"

* + ? { }

正则 待匹配字符 匹配
结果
说明
李.? 李杰和李莲英和李二棍子
李杰
李莲
李二

?表示重复零次或一次,即只匹配"李"后面一个任意字符

李.* 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子
*表示重复零次或多次,即匹配"李"后面0或多个任意字符
李.+ 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子
+表示重复一次或多次,即只匹配"李"后面1个或多个任意字符
李.{1,2} 李杰和李莲英和李二棍子

李杰和
李莲英
李二棍

{1,2}匹配1到2次任意字符

注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

正则 待匹配字符 匹配
结果
说明
李.*? 李杰和李莲英和李二棍子

惰性匹配

字符集[][^]

正则 待匹配字符 匹配
结果
说明
李[杰莲英二棍子]* 李杰和李莲英和李二棍子
李杰
李莲英
李二棍子

表示匹配"李"字后面[杰莲英二棍子]的字符任意次

李[^和]* 李杰和李莲英和李二棍子

李杰
李莲英
李二棍子

表示匹配一个不是"和"的字符任意次
[\d] 456bdha3
4
5
6
3

表示匹配任意一个数字,匹配到4个结果
[\d]+ 456bdha3
456
3

表示匹配任意个数字,匹配到2个结果

分组 ()与 或 |[^]

身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部???数字组成,首位不能为0;如果是18位,则前17位全部是数字,末位可能是数字或x,下面我们尝试用正则来表示:

正则 待匹配字符 匹配
结果
说明
^[1-9]\d{13,16}[0-9x]$ 110101198001017032
110101198001017032

   表示可以匹配一个正确的身份证号
^[1-9]\d{13,16}[0-9x]$ 1101011980010170
1101011980010170

表示也可以匹配这串数字,但这并不是一个正确的身份证号码,它是一个16位的数字
^[1-9]\d{14}(\d{2}[0-9x])?$ 1101011980010170
False

现在不会匹配错误的身份证号了()表示分组,将\d{2}[0-9x]分成一组,就可以整体约束他们出现的次数为0-1次
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$ 110105199812067023
110105199812067023

表示先匹配[1-9]\d{16}[0-9x]如果没有匹配上就匹配[1-9]\d{14}

转义符 \

在正则表达式中,有很多有特殊意义的是元字符,比如\d和\s等,如果要在正则中匹配正常的"\d"而不是"数字"就需要对"\"进行转义,变成‘\\‘。

在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中\也有特殊的含义,本身还需要转义。所以如果匹配一次"\d",字符串中要写成‘\\d‘,那么正则里就要写成"\\\\d",这样就太麻烦了。这个时候我们就用到了r‘\d‘这个概念,此时的正则是r‘\\d‘就可以了。

正则 待匹配字符 匹配
结果
说明
\d \d  False
因为在正则表达式中\是有特殊意义的字符,所以要匹配\d本身,用表达式\d无法匹配
\\d \d  True
转义\之后变成\\,即可匹配
"\\\\d" ‘\\d‘  True
如果在python中,字符串中的‘\‘也需要转义,所以每一个字符串‘\‘又需要转义一次
r‘\\d‘ r‘\d‘  True
在字符串之前加r,让整个字符串不转义

贪婪匹配

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

正则 待匹配字符 匹配
结果
说明
<.*>
<script>...<script>

<script>...<script>
默认为贪婪匹配模式,会匹配尽量长的字符串
<.*?> r‘\d‘

<script>
<script>

加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串
几个常用的非贪婪匹配Pattern*? 重复任意次,但尽可能少重复+? 重复1次或更多次,但尽可能少重复?? 重复0次或1次,但尽可能少重复{n,m}? 重复n到m次,但尽可能少重复{n,}? 重复n次以上,但尽可能少重复

.*?的用法

. 是任意字符* 是取 0 至 无限长度? 是非贪婪模式。何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:.*?x

就是取前面任意长度的字符,直到一个x出现
# 字符组 []# 在一个字符的位置上能出现的内容# [1bc] 是一个范围# [0-9][A-Z][a-z]    匹配三个字符# [abc0-9]           匹配一个字符# [0-9a-zA-Z]        匹配一个字符

# 18位身份证号# [1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9X]

# \d == [0-9] 也表示匹配一个字符,匹配的是一个数字# \w == [0-9a-zA-Z_] 也表示匹配一个数字字母下划线# \s == [\n \t]  包括回车 空格 和 制表符tab    # \n  匹配回车    # \t  匹配制表符# \D  匹配非数字# \W  匹配非数字字母下滑线# \S  匹配非空白

# [\d\D] [\w\W] [\s\S] 匹配所有

# 我写了一个规则是一个完整的规则,不能拆开看# 从头开始去匹配一个字符串# 能匹配到多个符合规则的就是多条结果
 

原文地址:https://www.cnblogs.com/kcwxx/p/9431476.html

时间: 2024-10-14 19:06:52

常用模块--- 正则模块 正则表达式 re 模块的相关文章

python开发模块基础:正则表达式&amp;re模块

一,正则表达式 1.字符组:[0-9][a-z][A-Z] 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示字符分为很多类,比如数字.字母.标点等等.假如你现在要求一个位置"只能出现一个数字",那么这个位置上的字符只能是0.1.2...9这10个数之一.可以写成这种 [0-5a-eA-Z] 取范围的匹配 2.字符 1 #!/usr/bin/python env 2 #_*_coding:utf-8_*_ 3 4 . 匹配除换行符以外的任意字符 5 \w 匹配字母

正则表达式模块re:正则表达式常用字符、常用可选标志位、group与groups、match、search、sub、findall、compile、

re: 介绍:关于正则表达式的模块 正则表达式字符: 匹配*号前的字符0次或多次   意义 例子[#后面代表结果] . .代表匹配一个任意字符,\n除外 ^ ^后面的字符串必须是待匹配字符串的开头,否则找不到 $ $前面的字符串必须是待匹配字符串的结尾,否则找不到 \d 可以匹配一个数字 \D 匹配非数字 \s 可以匹配一个空白字符(空格,缩进符.\n,\r)       可以用+.?.*来选择匹配次数     + 代表匹配前一个字符一次或多次,贪婪的   ? 代表匹配前一个字符0次或1次,不贪

Python全栈 正则表达式(re模块正则接口全方位详解)

re模块是Python的标准库模块 模块正则接口的整体模式 re.compile 返回regetx对象 finditer fullmatch match search 返回 match对象 match.属性|方法 re模块的使用: regex = re.compile(pattern,flags = 0) 功能 : 生成正则表达式对象 参数 : pattern     正则表达式 flags  功能标志位,丰富正则表达式的匹配 返回值: 返回一个正则表达式对象 re.findall(patter

Python常用模块——正则表达式re模块

Python常用模块--正则表达式re模块 引子 请从以下文件里取出所有的手机号 姓名 地区 身高 体重 电话 况咏蜜 北京 171 48 13651054608 王心颜 上海 169 46 13813234424 马纤羽 深圳 173 50 13744234523 乔亦菲 广州 172 52 15823423525 罗梦竹 北京 175 49 18623423421 刘诺涵 北京 170 48 18623423765 岳妮妮 深圳 177 54 18835324553 贺婉萱 深圳 174 5

day6 反射,hashlib模块,正则匹配,冒泡,选择,插入排序

一.反射(自省) 首先通过一个例子来看一下本文中可能用到的对象和相关概念. import sys # 模块,sys指向这个模块对象import inspectdef foo(): pass # 函数,foo指向这个函数对象 class Cat(object): # 类,Cat指向这个类对象 def __init__(self, name='kitty'): self.name = name def sayHi(self): # 实例方法,sayHi指向这个方法对象,使用类或实例.sayHi访问

python之基础篇(十一)——正则表达式RE模块

防伪码:忘情公子著 正则表达式(RE)是一种小型的.高度专业化的编程语言,在python中,它通过re模块实现. 正则表达式可以实现以下功能: 为想要匹配的相应字符串集指定规则: 能够匹配不定长的字符集: 可以指定正则表达式的一部分的重复次数: 可以使用RE以各种方式来修改或分割字符串 正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行. 字符匹配: 普通字符: 大多数字母和字符一般都会和自身匹配. 如正则表达式test会和字符串"test"完全匹配 元字符: []: 常

冒泡算法,递归,正则表达式,模块,格式化字符串的整理

一.冒泡排序原理整理图 二.递归流程图剖析 三.正则表达式内容整理 1.re模块:python中re模块提供了正则表达式相关操作 2.元字符的整理 .  ^  $  *  +  ?  {}  []  |  \ 3.   .   匹配除换行符以外的任意字符(可以通过加参数re.S匹配上换行符) \w 匹配字母或数字或下划线或汉字 \s  匹配任意的空白符 \d  匹配数字 \b  匹配单词的开始或结束 ^   匹配字符串的开始 $  匹配字符串的结束 4.   * 重复零次或更多次(常用的) +

python模块之re正则表达式

一.简单介绍 正则表达式是一种小型的.高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分.在python中,主要通过re模块来实现. 正则表达式模式被编译成一系列的字节码,然后由用c编写的匹配引擎执行.那么正则表达式通常有哪些使用场景呢? 比如为想要匹配的相应字符串集指定规则: 该字符串集可以是包含e-mail地址.Internet地址.电话号码,或是根据需求自定义的一些字符串集: 当然也可以去判断一个字符串集是否符合我们定义的匹配规则: 找到字符串中匹配该规

python基础篇【第六篇】模块补充、正则表达式

上一篇已经讲述了什么是模块,下面我们再一起认识一些python中常用的模块. 一.os模块 前面也有用到过os模块,但那都是小儿科,os模块在日后的python撸码中将一直会伴随着你! python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关. 要想使用模块,需先导入模块   如:import os     导入模块 1. os.name()——判断现在正在实用的平台,Windows 返回 ‘nt'; Linux 返回’posix' 1