1.group

  除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(Group)。比如:^(\d{3})-(\d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码

m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')

print(m.group(0))

print(m.group(1))

print(m.group(2))

010-12345

010

12345

如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来。

注意到group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串。

t = '19:05:30'

m = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t)

print(m.groups())

输出:

('19', '05', '30')

2.贪心匹配

print(re.match(r'^(\d+)(0*)$', '102300').groups())

('102300', '')

print(re.match(r'^(\d+?)(0*)$', '102300').groups())

('1023', '00')

由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串,加个?就可以让\d+采用非贪婪匹配;

3.编译

如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式

编译

tele = re.compile(r'^(\d{3})-(\d{3,8})$')

使用:

print(tele.match('010-12345').groups())

('010', '12345')

print(tele.match('010-8086').groups())

('010', '8086')

python3进阶之正则表达式之re模块之切分字符串

print('a b c'.split(' '))

print(re.split(r'\s+','a b c'))

print(re.split(r'[\s,;]+', 'a,b;; c d'))

注意+号的位置

输出:

['a', 'b', '', '', 'c']

['a', 'b', 'c']

['a', 'b', 'c', 'd']

通配符:句点.(.ython与jpython与python与 ython都匹配,但不与ython不与tpython匹配,因为一个句点只匹配一个字符,而不与零或两个字符匹配,除换行符外与其他字符都匹配。

特殊字符:通配符也属于特殊字符,例,想要匹配‘python.org’,可以直接使用模式‘python.org’,但它也与‘pythonzorg'匹配(因为.是通配符啊,滑稽脸~)想要特殊字符与普通字符一样,可对其进行转义(2种方式)

python\.org #两个反斜杠包括两层转义:解释器执行的转义,模块re执行的转义r'python.org'

字符集:[],只能匹配一个字符

                例如,[pj]ython与python与jython匹配

                可使用范围:[a-z]与a~z的任何字母都匹配

                [a-zA-Z0-9]与大写字母,小写字母,数字都匹配

二选一模式:管道字符 |

python|perl

子模式:

p(ython|erl)

可选模式:在子模式后面加上问号

r'(http://)?(www.)?python.org'

重复模式:

(pat)* #可重复多次(pat)+ #可重复1或多次(pat){m,n} #可重复m~n次

确定字符串的开头和末尾是否与模式匹配:^,$

第一:转义字符:

改变原有字符的意义,一般都以反斜杠\作为起始。

\n 意思是换行,不再表示字母n。

第二:python中,反斜杠\本身就是个转义字符。

1、\,第一个反斜杠表示转义,意思是第二反斜杠不再视为一个转义字符。

print('\')

打印输出单独一个\。

2、加一个r【r是原始字符的简写:raw string】,就表示废掉python中\的转义能力。

print(r'\')

打印输出两个\反斜杠。

第三:python中re模块,本身又指定\为转义字符。

因为我们知道,在python看来\字符,实际上只是一个\反斜杠。

1、加r

test_string='a\kk\\cc'print(test_string)u=re.compile(r'\\')z=u.findall(test_string)print(z)print(str(*z))

打印结果: a\kk\cc

['\\']

\

python对字符需要转义,但是我们看到z它是列表形式,所有输出了4个反斜杠;当我们把它转行成字符串,在打印就是\了

2、不加r

import retest_string='a\kk\\cc'print(test_string)u=re.compile('\\')z=u.findall(test_string)print(z)

打印结果:a\kk\cc

['\', '\', '\']

实际上就匹配了三个\,因为匹配的是列表形式,如果把列表转换成字符串,那么打印的是三个\而不是三个\

python 正则进阶的更多相关文章

  1. Python正则进阶

    目录 1.Python正则表达式模块 1.1 正则表达式处理字符串主要有四大功能 1.2 Python中re模块使用正则表达式的两种方法 1.3 正则表达式对象的常用方法 1.4 匹配对象的属性与方法 ...

  2. python 正则进阶常用方法

    表达式 描述 正则表达式示例 符号 literal 匹配文本字符串的字面值literal foo rel1|rel2 匹配正则表达式rel1或rel2 foo|bar . 匹配任何字符(除了\n之外) ...

  3. 学习python须知,Python基础进阶需掌握哪些知识点?

    Python基础进阶需要掌握哪些知识点?Python将是每个程序员的标配,有编程基础再掌握Python语言对于日后的升职加薪更有利.Python语言简洁利于理解,语法上相对容易能够让开发者更专注于业务 ...

  4. Python正则式的基本用法

    Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...

  5. python 正则,常用正则表达式大全

    Nginx访问日志匹配 re.compile #re.compile 规则解释,改规则必须从前面开始匹配一个一个写到后面,前面一个修改后面全部错误.特殊标准结束为符号为空或者双引号:  改符号开始 从 ...

  6. python 正则使用笔记

    python正则使用笔记 def remove_br(content): """去除两边换行符""" content = content.r ...

  7. Python正则处理多行日志一例

    正则表达式基础知识请参阅<正则表达式基础知识>,本文使用正则表达式来匹配多行日志并从中解析出相应的信息. 假设现在有这样的SQL日志: SELECT * FROM open_app WHE ...

  8. Python正则匹配字母大小写不敏感在读xml中的应用

    需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...

  9. Python正则替换字符串函数re.sub用法示例(1)

    本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替 ...

随机推荐

  1. Jupyter notebook 转 pdf [完整转换]

  2. arguments.callee用法

    arguments.callee 在哪一个函数中运行,它就代表哪一个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函数,没有名子,无名可调. 这时就可以用argume ...

  3. leetcode-algorithms-3 Longest Substring Without Repeating Characters

    leetcode-algorithms-3 Longest Substring Without Repeating Characters Given a string, find the length ...

  4. MySql(九)索引

    一.索引的介绍 数据库中专门用于帮助用户快速查找数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置吗,然后直接获取. 二 .索引的作用 约束和加速查找 三.常见的几 ...

  5. 快速搭建springboot框架以及整合ssm+shiro+安装Rabbitmq和Erlang、Mysql下载与配置

    1.快速搭建springboot框架(在idea中): file–>new project–>Spring Initializr–>next–>然后一直下一步. 然后复制一下代 ...

  6. memory prefix pre,pro,penta,pseudo out _p 1

    1● pre 前的,预先   2● pro 在前,很多,赞同       3● penta 5,五     4● pseaudo   伪,假 pseudo  

  7. sql根据年月日查询注册数或者和值

    //公司需要我做一个根据每天用户注册数量生成一个折现图,sql如下,//亲测好用,只是如果某一天没有注册的话,就不会显示日期 SELECT DATE_FORMAT(f.registDate, '%Y- ...

  8. js--事件冒泡-捕获

    什么是事件流: 事件流描述的是从页面中接受事件的顺序,但有意思的是,微软(IE)和网景(Netscape)开发团队居然提出了两个截然相反的事件流概念, IE的事件流是事件冒泡流(event bubbl ...

  9. GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名 zhuan

    1.gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译 ...

  10. shell脚本分析二

    Shell 基本运算符Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实 ...