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 ...
随机推荐
- Windows 通过命令行设置固定ip地址
Winserver1709 之后 windows系统取消了GUI界面 设置ip地址 需要使用命令行界面进行 这里简单记录一下 打开win1709的虚拟机 进入命令行控制台 输入 ipconfig 查看 ...
- 虚拟机使用不同CPU配置时内存性能的差异
第一款机器的配置: CPU(s): 8On-line CPU(s) list: 0-7Thread(s) per core: 1Core(s) per socket: 4座: 2NUMA 节点: 1 ...
- PRML读书笔记_绪论
一.基本名词 泛化(generalization) 训练集所训练的模型对新数据的适用程度. 监督学习(supervised learning) 训练数据的样本包含输入向量以及对应的目标向量. 分类( ...
- App WebView实例化
a,高级设置里的环境变量 jdk的配置 b,下载Google的sdk,里面直接包含eclipse 1,新建一个项目 2,起个名字 3,设么走不做,next 4,只操作选择显示的三种方式 5,next什 ...
- awk、sed、grep三大shell文本处理工具之sed的应用
sed 流编辑器 对文本中的行,逐行处理 非交互式的编辑器 是一个编辑器 1.工作流程 1)将文件的第一行读入到自己的缓存空间(模式空间--pattern space),删除掉换行符 2)匹配,看一下 ...
- React Native & Web APP
React Native Build native mobile apps using JavaScript and React https://facebook.github.io/react-na ...
- rabbitmq安装与使用总结
一.随着公司业务量的增加,原本部署在Windows服务器的RabbitMQ集群(3.6.1)总是出现莫名其妙的问题,经查询官方Issue,确认是RabbitMQ 3.6.1 版本的bug.查看从3.6 ...
- 16mysql1
一.数据库的基本概念 1.1 常用的关系型数据库 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 1.2 sql语言 ...
- 睡前小dp-poj1276-多重背包+二进制优化
http://poj.org/problem?id=1276 简单的多重背包,不过需要优化一下才能过.网上还有暴力的做法. 二进制优化在背包九讲里讲的比较清楚.对于多重背包的每一件物品,使用二进制的形 ...
- HDU5387-模拟水题
模拟钟表的时分秒针的走动,给出时间求出夹角.注意每组输出要有一个空格 以后要想好再写代码,这样一个水题做了50分钟,太弱了... #include<cstdio> #include< ...