一、元字符

字符组是元字符中的一个。在字符组中所有的字符都可以匹配任意一个字符位置上能出现的内容,如果在字符串中有任意一个字符是字符组中的内容,那么就是匹配上的项。

[0-9]   [a-z]    [A-Z] ascii编码小的值,指向一个大的值

# \d表示匹配一个数字  [0-9]

元字符:

\w word匹配字母和数字、下划线 \d digit    \s space \n next \t tab \W \D \S
^开始 $结尾 \b   匹配边界
[] [^]   字符组相关的 
 |      或
() 分组
. 匹配除了换行符之外的任意字符
二、量词
?0次或1次,+1次或多次 *0次或多次 {n}n次 {n,}n次或多次 {n,m}n次或m次
\d+整数
\d+\.\d+  小数
\d+\.\d+|\d+ 整数或者小数  \d+(\.\d+)?
# 贪婪匹配  : 正则会尽量多的帮我们匹配
# 默认贪婪 回溯算法
# 非贪婪匹配 :会尽量少为我们匹配
# 量词?表示非贪婪 惰性匹配
# .*?x 表示匹配任意长度任意字符遇到一个x就立即停止
 元字符注意事项:

 元字符 量词
元字符 量词 ? 在量词的范围内尽量少的匹配这个元字符
分组 对某些固定的内容做量词约束
或 把长的放前面
 转义符
pattern = r'\\n'
s = r'\n'
 转义:使用 \或r转义

三、re模块

3.1  findall

import re
# findall
ret = re.findall('\d+','SGY93SHD2183Y0')
print(ret)
结果:
['', '', '']
 参数 正则表达式 待匹配的字符串
返回值 是一个列表 所有匹配到的项
没有匹配到会返回一个空列表
如果遇到分组,findall会优先显示分组中的内容
(?:正则表达式)取消分组优先

3.2  search

import re
# search
ret = re.search('\d+','SGY93SHD2183Y0')
print(ret)
print(ret.group())
结果:
<_sre.SRE_Match object; span=(3, 5), match=''> # 对象
93
返回值 : 返回一个SRE_Match对象 ,没有匹配到会返回None,没有.group()方法。如果有分组,通过索引取各分组中的内容
通过group去取值
且只包含第一个匹配到的值
      
findall 有个特点,会优先显示分组中的内容。优先前面的
import re
ret = re.findall('(www)\.(baidu|oldboy)\.(com)','www.baidu.com')
print(ret) # [('www', 'baidu', 'com')]

search的特点:

import re
ret = re.search('(www)\.(baidu|oldboy)\.(com)', 'www.baidu.com')
print(ret.group(0)) # www.baidu.com
print(ret.group(1)) # www
print(ret.group(2)) # baidu
print(ret.group(3)) # com

match  验证用户输入的内容

ret = re.match('\d+','25ahs293djjk293sahf2938u')
print(ret)      # <_sre.SRE_Match object; span=(0, 2), match='25'>
print(ret.group())    # 25

查看字符串开始位置的数字是多少,索引分别是多少。

分割split的用法

import re
s = 'alex8123egon1120boss_jin'
ret = re.split('\d+',s)
print(ret) # ['alex', 'egon', 'boss_jin'] ret = re.split('(\d+)',s) # (\d)+ \d\d\d\d\d...(\d)
print(ret) # ['alex', '8123', 'egon', '1120', 'boss_jin'] ret = re.split('\d(\d)',s)
print(ret) # ['alex', '1', '', '3', 'egon', '1', '', '0', 'boss_jin']
替换sub
s = 'alex|egon|boss|jin'
print(s.replace('|','')) # alexegonbossjin s1 = 'alex8123egon1120boss_jin626356'
ret = re.sub('\d+','|',s1)
print(ret) # alex|egon|boss_jin| ret = re.sub('\d+','|',s1,1)
print(ret)
#alex|egon1120boss_jin626356 替换一次 ret = re.subn('\d+','|',s1)
print(ret) # ('alex|egon|boss_jin|', 3) 元组,并显示次数

compile 编译正则规则

import re
com = re.compile('\d+') # 制定正则规则
ret = com.search('abc1cde2fgh3skhfk')
print(ret.group()) # ret = com.findall('abc1cde2fgh3skhfk')
print(ret) # ['1', '2', '3'] ret = com.finditer('abc1cde2fgh3skhfk')
for i in ret:
print(i.group()) # 1 2 3

finditer 节省空间的方法

ret = re.finditer('\d+','abc1cde2fgh3skhfk')
print(ret)
for i in ret:
print(i.group()) # 逐个取值

四、分组命名、分组约束

当我们需要取  <h1>函数</h1> \<a>函数</a> 中的内容时,需要用到分组命名:

pattern = '<(?P<tag>.*?)>.*?</(?P=tag)>'
ret = re.search(pattern,'<h1>函数</h1>')
print(ret) # <_sre.SRE_Match object; span=(0, 11), match='<h1>函数</h1>'>
if ret:
print(ret.group()) # <h1>函数</h1>
print(ret.group(1))  # h1
print(ret.group('tag')) # h1

可以去除类似       <h1>函数</h1>   标签对

直接用\1也是可以的

pattern = r'<(.*?)>.*?</\1>'
ret = re.search(pattern,'<a>函数</a>')
print(ret) # <_sre.SRE_Match object; span=(0, 11), match='<h1>函数</h1>'>
if ret:
print(ret.group()) # <h1>函数</h1>
print(ret.group(1)) # h1
												

基础的正则表达式与re模块(2)的更多相关文章

  1. Python开发基础-Day14正则表达式和re模块

    正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...

  2. python基础之正则表达式和re模块

    正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...

  3. python基础之 正则表达式,re模块

    1.正则表达式 正则表达式:是字符串的规则,只是检测字符串是否符合条件的规则而已 1.检测某一段字符串是否符合规则 2.将符合规则的匹配出来re模块:是用来操作正则表达式的 2.正则表达式组成 字符组 ...

  4. python基础之正则表达式 re模块

    内容梗概: 1. 正则表达式 2. re模块的使⽤ 3. 一堆练习正则表达式是对字符串串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤.使用正则的优缺点: 优点: 灵活,功能性强, ...

  5. Python与正则表达式[0] -> re 模块的正则表达式匹配

    正则表达式 / Regular Expression 目录 正则表达式模式 re 模块简介 使用正则表达式进行匹配 正则表达式RE(Regular Expression, Regexp, Regex) ...

  6. python基础之正则表达式

    正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...

  7. 黑马程序员:Java基础总结----正则表达式

    黑马程序员:Java基础总结 正则表达式   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import  java.util.regex.*; 符合一定规 ...

  8. Python之正则表达式(re模块)

    本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 正则表达式(Regluar Expressions)又称规则 ...

  9. 【转】Python之正则表达式(re模块)

    [转]Python之正则表达式(re模块) 本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 参考文档 提示: ...

随机推荐

  1. Java 9 - Java Number类

    Java Number类 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double等. 实例 int i = 5000; float gpa = 13.65 ...

  2. Intorduction To Computer Vision

    本文将主要介绍图像分类问题,即给定一张图片,我们来给这张图片打一个标签,标签来自于预先设定的集合,比如{people,cat,dog...}等,这是CV的核心问题,图像分类在实际应用中也有许多变形,而 ...

  3. day6作业(元组,字典,集合)

    默写: 1.元组 字典 集合 列表 各自的特点 2.字典添加 删除 修改 循环 必做: 1.餐厅提供了五种不同的菜,使用元组来存储他们,并循环打印出所有菜名,要求用户输入新加的菜名,加入到菜单中,并重 ...

  4. web前端全栈学习之路

    web前端全栈学习之路 --- 陆续更新中 一.HTML相关 1.HTML常用标签:http://www.cnblogs.com/wyb666/p/8733699.html 2.HTML5基础: 3. ...

  5. 【接口测试】【SOAP】简单的接口测试学习

    ==================================================================================================== ...

  6. 19.python设置单线程和多线程

    1.单线程实例: 代码如下: from time import ctime,sleep def music(A): for i in range(2): print ("I was list ...

  7. keepalived nginx 双机热备图文讲解

    http://blog.csdn.net/wanglei_storage/article/details/51175418

  8. leetcode1005

    func largestSumAfterKNegations(A []int, K int) int { sort.Ints(A) var negatives int var zeros int va ...

  9. PHPExcel在TP下使用

    第一:你要去PHPExcel官网下载,然后放到网站的Vendor文件夹下面.当然这是为了好管理和导入.你放在其他位置也没有关系. 第二:当然是在你需要的地方写代码.我只写样例,你看懂了就可以灵活的使用 ...

  10. python 阿狸的进阶之路(5)

    一.模块 1.什么是模块: 包含了一组功能的python文件,文件名是xxx.py,模块名是module. 可以使用 import module,四个通用的类别: (1)用python编写的py文件 ...