python之re正则简单够用
0.
1.参考
https://docs.python.org/2/library/re.html
https://docs.python.org/2/howto/regex.html
https://docs.python.org/3/library/re.html
| string | re | 备注 |
| re.match(pattern, string, flags=0) | at the start of the string | |
| S.find(sub [,start [,end]]) -> int | re.search(pattern, string, flags=0) | Scan through string looking for a match |
| S.replace(old, new[, count]) -> string | re.findall(pattern, string, flags=0) | re.finditer |
2.分组 m.group()
xx
In [560]: m.group?
Docstring:
group([group1, ...]) -> str or tuple.
Return subgroup(s) of the match by indices or names.
For 0 returns the entire match.
Type: builtin_function_or_method In [542]: m=re.search(r'(-{1,2}(gr))','pro---gram-files') In [543]: m.group() #自带
Out[543]: '--gr' In [544]: m.group(0) #自带,返回整个匹配到的字符串 For 0 returns the entire match. 注意 m.string 是被检索的完整原文。。。
Out[544]: '--gr' In [545]: m.group(1)
Out[545]: '--gr' In [546]: m.group(2)
Out[546]: 'gr' In [547]: m.group(3) #加的 ( 不满足则报错
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-547-71a2c7935517> in <module>()
----> 1 m.group(3) IndexError: no such group In [548]: m.group(1,2) #选择多个分组,返回tuple
Out[548]: ('--gr', 'gr') In [549]: m.groups() #选择所有分组
Out[549]: ('--gr', 'gr')
m.groupdict 用于命名分组
In [557]: m.groupdict?
Docstring:
groupdict([default=None]) -> dict.
Return a dictionary containing all the named subgroups of the match,
keyed by the subgroup name. The default argument is used for groups
that did not participate in the match
Type: builtin_function_or_method In [558]: m=re.search(r'(-{1,2}(?P<GR>gr))','pro---gram-files') In [559]: m.groupdict()
Out[559]: {'GR': 'gr'}
3.提取 re.findall()
re.findall(pattern, string, flags=0)
In [97]: text = "He was carefully disguised but captured quickly by police." In [98]: re.findall(r"\w+ly", text) #相当于 m.group(0)
Out[98]: ['carefully', 'quickly'] In [99]: re.findall(r"(\w+)ly", text) #手动加单个括号限定内容,相当于返回 m.group(1)
Out[99]: ['careful', 'quick'] In [100]: re.findall(r"((\w+)(ly))", text) #多个括号,从左到右数 (,相当于返回 m.groups()
Out[100]: [('carefully', 'careful', 'ly'), ('quickly', 'quick', 'ly')]
In [102]: re.findall(r"((1\w+)(ly))", text)
Out[102]: []
4.替换 re.sub()
re.sub(pattern, repl, string, count=0, flags=0)
repl 里面的 前向引用 Backreferences, such as \6, are replaced with the substring matched by group 6 in the pattern. 也可以通过 func 实现。
注意 mysql regexp 不支持 \1
https://stackoverflow.com/questions/4122393/negative-backreferences-in-mysql-regexp 提到 unless you can install/use LIB_MYSQLUDF_PREG.
https://stackoverflow.com/questions/7058209/reference-to-groups-in-a-mysql-regex
In [158]: def func(m):
...: return m.group('DEF')+' '+m.group(2) #别名
...: In [159]: re.sub(r'(?P<DEF>def)\s+([a-z]+)\s*\(\s*\):', func, 'def func(): def f():')
Out[159]: 'def func def f' In [160]: re.sub(r'(?P<DEF>def)\s+([a-z]+)\s*\(\s*\):', r'\1 \2', 'def func(): def f():') #不支持 \别名
Out[160]: 'def func def f'
5. Backreferences 前向引用在 pattern
5.1扑克牌找对子
In [204]: re.search(r'(.).*\1','ab123') In [205]: re.search(r'(.).*\1','ab121')
Out[205]: <_sre.SRE_Match at 0x71ca120> In [206]: _.group()
Out[206]: ''
5.2连续多个相同
In [207]: re.search(r'.{3}','') #错误
Out[207]: <_sre.SRE_Match at 0x71b94a8>
In [208]: re.search(r'(.){3}','') #错误
Out[208]: <_sre.SRE_Match at 0x71ca198>
In [209]: re.search(r'(.)\1\1','') #正确
In [210]: re.search(r'(.)\1\1','')
Out[210]: <_sre.SRE_Match at 0x71ca210>
In [211]: re.search(r'(.)\1{2}','')
Out[211]: <_sre.SRE_Match at 0x71ca288>
In [212]: _.group()
Out[212]: ''
python之re正则简单够用的更多相关文章
- Python正则简单实例分析
Python正则简单实例分析 本文实例讲述了Python正则简单用法.分享给大家供大家参考,具体如下: 悄悄打入公司内部UED的一个Python爱好者小众群,前两天一位牛人发了条消息: 小的测试题: ...
- python浅谈正则的常用方法
python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...
- python匹配ip正则
python匹配ip正则 #!/usr/bin/env python # -*- coding:utf-8 -*- import re ip_str = "asdad1.1.1.1sdfwe ...
- python 多线程就这么简单(续)
之前讲了多线程的一篇博客,感觉讲的意犹未尽,其实,多线程非常有意思.因为我们在使用电脑的过程中无时无刻都在多进程和多线程.我们可以接着之前的例子继续讲.请先看我的上一篇博客. python 多线程就这 ...
- python模块介绍- HTMLParser 简单的HTML和XHTML解析器
python模块介绍- HTMLParser 简单的HTML和XHTML解析器 2013-09-11 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq ...
- 基于Python使用SVM识别简单的字符验证码的完整代码开源分享
关键字:Python,SVM,字符验证码,机器学习,验证码识别 1 概述 基于Python使用SVM识别简单的验证字符串的完整代码开源分享. 因为目前有了更厉害的新技术来解决这类问题了,但是本文作 ...
- Python的变量及简单数据类型
Python的变量及简单类型 1. 变量 在Python编程中,变量是用来存放值或对像的容器.变量的名称可以自定义,但需遵循一定的规范,否则可能会引发一些错误.Python的变量可以分为数字.字符和 ...
- Python与C的简单比较(Python3.0)
Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...
- Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现 by:授客 QQ:1033553122 测试环境 功能需求 实现思路 代码实践(关键技术点实现) 代码模块组织 ...
随机推荐
- 总线复习之SPI
SPI总线协议以ds1302为例讲解 1.1概述. 1.2根据时序图来分析. 1.3再熟读一下DS1302的数据手册和SPI总线协议的使用. 1.4结合ds1302功能实现一定的功能. 1.1概述SP ...
- 【XSY2925】cti 网络流
题目描述 有一个 \(n\times m\)的网格,每个格子里面可能有一些炮塔,或者有几个人. 每个炮塔可以在给定的方向(上下左右)上选一个点作为它的攻击位置,然后消灭这个格子里面的所有人.当然也可以 ...
- mongoDB 文档操作_增
增加 / 插入 /保存 单文档插入 命令 db.collection.insertOne(doc) 功能 向被 use 的数据库中插入数据 实例 db.class.insertOne({"n ...
- Java【第一篇】基本语法之--关键字、标识符、变量
关键字 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所有字母都为小写 标识符 Java 对各种变量.方法和类等要素命名时使用的字符序列称为标识符凡是自己可以起名字的地 ...
- Windows 10 2016 LTS版本下载与激活
Windows 10 2016 LTS版是针对企业用户推出的长期支持版本,有如下2个优点:1.不会被强制升级.2.去掉小娜,应用商店等不常用的功能,系统相对简洁. 安装文件下载地址如下(x86/x64 ...
- BZOJ4036 按位或
解:有两种做法...... 第一种,按照秘密袭击coat的套路,我们只需要求出即可.因为一种操作了i次的方案会被恰好计数i次. 那么这个东西怎么求呢?直接用FWT的思想,对于一个状态s,求出选择s所有 ...
- shapeit提取或去除指定SNP和样本(shapeit extract or exclude SNP, sample)
shapeit最大的功能是对双链DNA进行phase和基因型进行impute.除此之外,还能提取SNP和样本,同样的,也能去除SNP和样本.下面简单介绍这两个功能. 一.提取SNP 提取SNP用到“- ...
- makefile :=和+=
经常有人分不清= .:=和+=的区别 这里我总结下做下详细的分析: 首先你得清楚makefile的运行环境,因为我是linux系统,那么我得运行环境是shell 在Linux的shell里,shel ...
- centos7搭建gitlab服务器、汉化
1.下载rpm安装包 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.8.5-ce.1.el7.x86_64.rp ...
- lombok系列(一)
如果在类上面使用@Builder注解, @Builder public class A { } controller中使用: public String test(@RequestBody A a){ ...