正则表达式用来拆分字符串

>>> 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 的正则表达式指北的更多相关文章

  1. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  2. Python 简单入门指北(一)

    Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...

  3. 写给前端的Python依赖管理指北

    概述 在Python的项目中,我们可以通过pip来安装依赖包,但是不像npm install,pip默认安装的依赖包会挂在全局上,不利于项目工程协作. 这时候需要一款类似npm的工具记录我们的项目依赖 ...

  4. python的正则表达式 re

    python的正则表达式 re 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一 ...

  5. python 历险记(六)— python 对正则表达式的使用(上篇)

    目录 引言 什么是正则表达式? 正则表达式有什么用? 正则表达式的语法及使用实例 正则表达式语法有哪些? 这些正则到底该怎么用? 小结 参考文档 系列文章列表 引言 刚接触正则表达式,我也曾被它们天书 ...

  6. Python的正则表达式与JSON

    Python的正则表达式需要导入re模块 菜鸟教程:http://www.runoob.com/python/python-reg-expressions.html 官方文档:https://docs ...

  7. 后端API入门到放弃指北

    后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一 ...

  8. Mac 软件包管理器Homebrew使用指北

    Homebrew Homebrew由开发者 Max Howell 开发,并基于 BSD 开源,是一个非常方便的软件包包管理器工具. Homebrew 官网 Homebrew 的几个核心概念 在正式介绍 ...

  9. msf stagers开发不完全指北(二)

    采用 Golang 开发stagers 上一篇文章 msf stagers开发不完全指北(一)中我们谈到如何采用 c 进行 msf 的 stagers 开发,这篇文章我们探讨一下如何使用 Golang ...

随机推荐

  1. Windows 通过命令行设置固定ip地址

    Winserver1709 之后 windows系统取消了GUI界面 设置ip地址 需要使用命令行界面进行 这里简单记录一下 打开win1709的虚拟机 进入命令行控制台 输入 ipconfig 查看 ...

  2. 虚拟机使用不同CPU配置时内存性能的差异

    第一款机器的配置: CPU(s): 8On-line CPU(s) list: 0-7Thread(s) per core: 1Core(s) per socket: 4座: 2NUMA 节点: 1 ...

  3. PRML读书笔记_绪论

    一.基本名词 泛化(generalization) 训练集所训练的模型对新数据的适用程度. 监督学习(supervised learning) 训练数据的样本包含输入向量以及对应的目标向量. 分类( ...

  4. App WebView实例化

    a,高级设置里的环境变量 jdk的配置 b,下载Google的sdk,里面直接包含eclipse 1,新建一个项目 2,起个名字 3,设么走不做,next 4,只操作选择显示的三种方式 5,next什 ...

  5. awk、sed、grep三大shell文本处理工具之sed的应用

    sed 流编辑器 对文本中的行,逐行处理 非交互式的编辑器 是一个编辑器 1.工作流程 1)将文件的第一行读入到自己的缓存空间(模式空间--pattern space),删除掉换行符 2)匹配,看一下 ...

  6. React Native & Web APP

    React Native Build native mobile apps using JavaScript and React https://facebook.github.io/react-na ...

  7. rabbitmq安装与使用总结

    一.随着公司业务量的增加,原本部署在Windows服务器的RabbitMQ集群(3.6.1)总是出现莫名其妙的问题,经查询官方Issue,确认是RabbitMQ 3.6.1 版本的bug.查看从3.6 ...

  8. 16mysql1

    一.数据库的基本概念 1.1  常用的关系型数据库                        数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 1.2  sql语言     ...

  9. 睡前小dp-poj1276-多重背包+二进制优化

    http://poj.org/problem?id=1276 简单的多重背包,不过需要优化一下才能过.网上还有暴力的做法. 二进制优化在背包九讲里讲的比较清楚.对于多重背包的每一件物品,使用二进制的形 ...

  10. HDU5387-模拟水题

    模拟钟表的时分秒针的走动,给出时间求出夹角.注意每组输出要有一个空格 以后要想好再写代码,这样一个水题做了50分钟,太弱了... #include<cstdio> #include< ...