python 的正则表达式指北
正则表达式用来拆分字符串
>>> s = 'one1two2three3four4'
>>> pattern = re.compile(r'\d+')
>>> for v in pattern.split(s):
... print(v)
...
one
two
three
four
正则表达式查找看上去是跟 split 相反的功能
pattern = re.compile(r'\d+')
for match in pattern.findall('one1two2three3four4'):
print(match)
正则表达式查找返回迭代器
pattern = re.compile(r'\d+')
for index,match in enumerate(pattern.finditer('one1two2three3four4')):
print(index,'--->',match.group())
暂时这样写
>>> pattern = re.compile(r'([a-zA-Z]+)(\d{3})([bcd]{3})',0)
>>> match = re.match(pattern,s)
>>> if match:
... for m in match.groups():
... print(m)
match 与 search 的 区别, match 从 0 下标开始匹配模式没匹配上则 返回 None , 而 search 则会遍历完整个字符串并返回第一个匹配到的值
## 这里是可以返回 234 的, 而把 search 替换为 match 则会报错
import re
>>> s = 'abc234bdli23243afsdf'
>>> p1 = re.compile('(\d+)')
>>> match1 = re.search(p1,s)
>>> for m in match1.groups():
... print(m)
正则拆分字符串
>>> s = 'ab c d e'
>>> str_list = re.split('\s+',s)
>>> for str in str_list:
... print(str)
...
ab
c
d
e
邮件拆分
>>> email = 'bill.gates@microsoft.com'
>>> pattern = re.compile('([\w]+)(\.?)([\w]+)@([\w\.]+)')
>>> match = re.match(pattern,email)
>>> print(match.groups())
('bill', '.', 'gates', 'microsoft.com')
邮件地址拆分二
# <Tom Paris> tom@voyager.org => Tom Paris
# bob@example.com => bob
# -*- coding: utf-8 -*-
import re
def name_of_email(addr):
pattern = re.compile(r'<?([a-zA-Z\s]+)>?.*@[\w\.]+')
match = re.match(pattern,addr)
rs = None
if match:
rs = match.group(1)
return rs
print(name_of_email('<Tom Paris> tom@voyager.org'))
# 测试:
assert name_of_email('<Tom Paris> tom@voyager.org') == 'Tom Paris'
assert name_of_email('tom@voyager.org') == 'tom'
print('ok')
向前向后查找
import re
key = r"<html><body><h1>hello world</h1></body></html>"#这段是你要匹配的文本
p1 = r"(?<=<h1>).*?(?=</h1>)"#这是我们写的正则表达式规则,你现在可以不理解啥意思
pattern1 = re.compile(p1)#我们在编译这段正则表达式
matcher1 = re.search(pattern1,key)#在源文本中搜索符合正则表达式的部分
print(matcher1.group(0))#打印出来
回溯查找
import re
key = r"<h1>hello world</h1>"
pattern = re.compile(r'(?<=<h([1-6])>).*?(?=</h\1>)') # 综合理解
match = re.search(pattern,key)
if match:
print(match.group(0))
手机号 查找
import re
txt = 'abc13975041239ljlboou'
phone_pattern = re.compile(r'1[39|38|58]\d{8}')
grp = re.findall(phone_pattern,txt)
grp2 = phone_pattern.findall(txt)
print(grp)
print(grp2)
拆分电话号码2
import re
txt = 'abc13975041239ljlboou'
phone_pattern = re.compile(r'1[39|38|58]\d{8}')
grp = re.findall(phone_pattern,txt)
grp2 = phone_pattern.findall(txt)
grp3 = phone_pattern.search(txt)
grp4 = phone_pattern.finditer(txt)
print(grp)
print(grp2)
print(grp3.group(0))
grp5 = [g for g in grp4]
print(grp5)
分组
import re
contactInfo = 'Doe, John: 555-1212'
pattern = re.compile(r'(?P<first>[a-zA-Z]+),\s+(?P<second>\w+):\s+([\d-]+)')
match = pattern.match(contactInfo)
if match:
print(match.group())
print(match.group(1))
print(match.group(2))
print(match.group(3))
仅起到分组 取别名作用 ?P
import re
contactInfo = 'Doe, John: 555-1212'
pattern = re.compile(r'(?P<first>[a-zA-Z]+),\s+(?P<second>\w+):\s+(?P<phone>[\d-]+)')
match = pattern.match(contactInfo)
if match:
print(match.group())
print(match.group('first'))
print(match.group('second'))
print(match.group('phone'))
>>> contactinfo = 'Doe, John: 555-1212'
>>> pattern = r'(?P<first>\w+),\s+(?P<second>\w+):\s+(?P<phone>[\d-]+)'
>>> match = re.match(pattern,contactinfo)
>>> match.groups()
('Doe', 'John', '555-1212')
>>> pattern = r'([a-zA-Z]+),\s+([a-zA-Z]+):\s+([\d-]+)'
>>> match = re.match(pattern,contactinfo)
>>> match.groups()
('Doe', 'John', '555-1212')
python 的正则表达式指北的更多相关文章
- Python 简单入门指北(二)
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
- Python 简单入门指北(一)
Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...
- 写给前端的Python依赖管理指北
概述 在Python的项目中,我们可以通过pip来安装依赖包,但是不像npm install,pip默认安装的依赖包会挂在全局上,不利于项目工程协作. 这时候需要一款类似npm的工具记录我们的项目依赖 ...
- python的正则表达式 re
python的正则表达式 re 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一 ...
- python 历险记(六)— python 对正则表达式的使用(上篇)
目录 引言 什么是正则表达式? 正则表达式有什么用? 正则表达式的语法及使用实例 正则表达式语法有哪些? 这些正则到底该怎么用? 小结 参考文档 系列文章列表 引言 刚接触正则表达式,我也曾被它们天书 ...
- Python的正则表达式与JSON
Python的正则表达式需要导入re模块 菜鸟教程:http://www.runoob.com/python/python-reg-expressions.html 官方文档:https://docs ...
- 后端API入门到放弃指北
后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一 ...
- Mac 软件包管理器Homebrew使用指北
Homebrew Homebrew由开发者 Max Howell 开发,并基于 BSD 开源,是一个非常方便的软件包包管理器工具. Homebrew 官网 Homebrew 的几个核心概念 在正式介绍 ...
- msf stagers开发不完全指北(二)
采用 Golang 开发stagers 上一篇文章 msf stagers开发不完全指北(一)中我们谈到如何采用 c 进行 msf 的 stagers 开发,这篇文章我们探讨一下如何使用 Golang ...
随机推荐
- 关于splice()方法,slice() 、split()方法讲解,reverse()方法、replace()方法
1.slice() 方法可从已有的数组中返回选定的元素. 语法 arrayObject.slice(start,end) 参数 描述 start 必需.规定从何处开始选取.如果是负数,那么它规定从数组 ...
- [转帖]Tomcat目录结构详解
Tomcat目录结构详解 https://www.cnblogs.com/veggiegfei/p/8474484.html 之前应该是知道一点 但是没有这么系统 感谢原作者的描述. 1.bin: 该 ...
- 小程序的wx.onAccelerometerChange
https://www.2cto.com/kf/201802/724174.html(copy) 也许有人会问,小程序中都是竖直app形态,要横竖屏判断有什么用?即使判断出了横屏状态,你能把小程序横过 ...
- 简单FTP服务器搭建
1 配置IIS 打开控制面板-卸载程序-点击 打开或关闭windows功能-勾选 internet信息服务-确定 2 配置iis web站点 开始菜单-搜索iis并进入iis管理器(计算机-右键-管理 ...
- html 头部 head
head里面包含标签有: title:html名称,每个html文档都必须有 形式:<title>名字</title>,文档区不显示,浏览器可以识别: 浏览器工具栏显示的页面标 ...
- atan和unwrap解卷绕
要计算一个系统相频特性,就要用到反正切函数,计算机中反正切函数规定,在一.二象限中的角度为0-pi,三四象限的角度为0--pi. 若一个角度从0变到2pi,但实际得到的结果是0-pi,再由-pi-0, ...
- 两个序列求前k大和
---恢复内容开始--- 没有题目,没有题意,这是学长提过的一个技巧,给你两个排好序的序列,每次可以各从中取一个,求前k大的和, 一个优先队列,先将a序列中最大的那个和b序列所有元素相加存进队列中,每 ...
- 【Sublime Text3】Package Control:Install Package不能使用解决方法
官网地址 https://packagecontrol.io/installation 报错内容 解决方法 https://packagecontrol.io/docs/troubleshoo ...
- hdu 4417 Super Mario (主席树)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意: 给你段长为n的序列,有q个询问,每次询问区间[l.r]内有多少个数小于等于k 思路: 之前用 ...
- c# Point不能输入小数
换成用 PointF PointF p = new PointF(116.305671f, 39.966051f); //6位小数后面要加f 表示转float,否则报错