python——re模块(正则表达式)
re 模块的使用:
1.使用compile()函数编译一个parttern对象, 例如:parttern=re.compile(r'\d+')
2.通过pattern对象提供的一系列属相和方法,对文本进行匹配查找,获得结果,即一个Match对象
- match 方法:从起始位置开始查找,一次匹配,匹配失败返回None ----------> match(string[, pos[, endpos]])
m = pattern.match('one12twothree34four', 3, 10) # 从下标3开始,也即从字符串'1'的位置开始匹配,返回一个Match对象, 没有匹配到的话返回None
# -*- conding:utf-8 -*- import re pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I) # re.I 表示忽略大小写
m = pattern.match("hello world wide web python") print(m) # <_sre.SRE_Match object; span=(0, 11), match='hello world'>
print(m.group(), type(m.group())) # hello world <class 'str'>
print(m.group(1)) # hello
print(m.group(2)) # world
print(m.span(), type(m.span())) # (0, 11) <class 'tuple'>
print(m.groups(), type(m.groups())) # ('hello', 'world') <class 'tuple'>- search 方法:从任何位置开始查找,一次匹配,匹配失败返回None ----------> search(string[, pos[, endpos]]) 使用同match方法
- findall 方法:全部匹配,返回列表,匹配失败返回空列表 ----------> findall(string[, pos[, endpos]])
# -*- conding:utf-8 -*- import re # 将正则表达式编译成pattern对象
pattern = re.compile(r'\d+') # 查找数字
rel1 = pattern.findall('hello 123 world 456 ')
print(rel1) # ['123', '456'] rel2 = pattern.findall('one12two23s34f45f56s78e89t10', 10, 20) # 指定匹配的起止位置
print(rel2) # ['34', '45', '56'] #re模块提供一个方法叫compile模块,提供我们输入一个匹配的规则
#然后返回一个pattern实例,我们根据这个规则去匹配字符串
pattern2 = re.compile(r'\d+\.\d*')
#通过partten.findall()方法就能够全部匹配到我们得到的字符串
result = pattern2.findall("123.141593, 'bigcat', 232312, 3.15")
#findall 以 列表形式 返回全部能匹配的子串给result
print(result) # ['123.141593', '3.15']- finditer 方法:全部匹配,返回迭代器 ,返回Match对象 ----------> finditer(string[, pos[, endpos]])
# -*- conding:utf-8 -*- import re '''finditer跟findall类似''' pattern = re.compile(r'\d+')
resl = pattern.finditer('hello-123-world-456-python-789') print(resl) # <callable_iterator object at 0x0000022A886FD470>
print(type(resl)) # <class 'callable_iterator'> # 迭代器对象
for m in resl: # m是Match对象, 具体操作见上面的match
print(m.group()) # 分别打印出123 456 789- split 方法:分割字符串,返回列表 ----------> split(string[, maxsplit])
# -*- conding:utf-8 -*- import re '''split方法按照规则将字符串分割后返回列表'''
p = re.compile(r'[\s\,;\t\n]+')
print(p.split(' a , bwf ;; c ')) # ['', 'a', 'bwf', 'c', '']- sub 方法:替换 ----------> sub(repl, string[, count])
# -*- conding:utf-8 -*- import re p = re.compile(r'(\w+) (\w+)')
s = 'hello 1236 hello 456'
print(p.sub('hello world', s)) # hello world hello world
3.使用match对象的属相和方法获取信息
match.group()
match.groups() # 匹配的所有 等同于 match.group()等同于match.group(0)
match.start() # 开始位置
match.end() # 结束位置
match.span() # 返回开始结束的区域跨度
4、匹配中文
中文的Unicode编码范围主要在[u4e00-u9fa5],没有包括全角中文标点,不过大部分情况下是够用了
# -*- conding:utf-8 -*- import re title = '你好,python , 你好,世界 hello world'
pa = re.compile(r'[\u4e00-\u9fa5]+')
t = pa.findall(title)
print(t) # ['你好', '你好', '世界']
5、贪婪匹配-------非贪婪匹配:python默认是贪婪匹配
贪婪匹配:在匹配成功的前提下,尽可能多的匹配(*)
非贪婪匹配:在匹配成功的前提下,尽可能少的匹配(?)
# -*- conding:utf-8 -*- import re s = 'abbbbbbdsddbbbb' res = re.findall('ab*', s) # *号是匹配前一个字符0次或无限次
print(res) # ['abbbbbb'] 匹配ab后已经匹配成功,但是由于是贪婪匹配,所以会继续往后尝试匹配 res2 = re.findall('ab*?', s)
print(res2) # ['a'] 匹配a成功后,由于是非贪婪匹配,所以匹配就结束了
加油,一步一步往下走,坚持下去,自己给自己打气加油,workon
python——re模块(正则表达式)的更多相关文章
- Python re模块 正则表达式
1 简介 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...
- Python re模块正则表达式
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- python的re正则表达式模块学习
python中re模块的用法 Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...
- Python之re模块 —— 正则表达式操作
这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突, ...
- Python中的re模块--正则表达式
Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...
- python常用模块(1):collections模块和re模块(正则表达式详解)
从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...
- python模块 re模块与python中运用正则表达式的特点 模块知识详解
1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...
- Python全栈 正则表达式(概念、、语法、元字符、re模块)
前言: 普通人有三件东西看不懂:医生的处方,道士的鬼符,程序员得正则表达式 什么是正则表达式? 正则表达式,又称规则表达式,英文名为Regular Expression,在代 ...
- 【Python开发】Python之re模块 —— 正则表达式操作
Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...
随机推荐
- bzoj 1592: [Usaco2008 Feb]Making the Grade 路面修整【dp】
因为是单调不降或单调不升,所以所有的bi如果都是ai中出现过的一定不会变差 以递增为例,设f[i][j]为第j段选第i大的高度,预处理出s[i][j]表示选第i大的时,前j个 a与第i大的值的差的绝对 ...
- 牛客OI周赛2-提高组
A.游戏 链接:https://www.nowcoder.com/acm/contest/210/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...
- 流程图软件draw.io
工作中经常需要梳理一些流程图,时序图.以前用微软Visio绘制流程图(当然不是正版Visio).后来为了响应国家号召,改用processon(proceson.com)进行绘制流程图.Processo ...
- [C陷阱和缺陷] 第5章 库函数
有关库函数的使用,我们能给出的最好建议是尽量使用系统头文件,当然也可以自己造轮子,随个人喜好.本章将探讨某些常用的库函数,以及编程者在使用它们的过程中可能出错之处. 5.1 返回整数的getc ...
- 枚举+贪心 HDOJ 4932 Miaomiao's Geometry
题目传送门 /* 题意:有n个点,用相同的线段去覆盖,当点在线段的端点才行,还有线段之间不相交 枚举+贪心:有坑点是两个点在同时一条线段的两个端点上,枚举两点之间的距离或者距离一半,尽量往左边放,否则 ...
- 题解报告:poj 1321 棋盘问题(dfs)
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
- multiprocessing的进程通信Pipe和Queue
pipe管道,2个进程通信,允许单项或者双向,multiprocessing.Pipe(duplex=False)为单项,默认双向 示例: from multiprocessing import Pr ...
- hdu5122 K.Bro Sorting
思路: 模拟. 实现: #include <iostream> #include <cstdio> using namespace std; ], n, t; int main ...
- org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property [xxx] not readable on type [xxx]
由于javaBean中的属性是custFullName,所以在使用jsp的时候,通过el表达式获取属性的值<td>${m.CustFullName}</td>.但是加载页面的时 ...
- Windows10环境中 laravel任务调度 如何启动调度
Windows10环境中 laravel任务调度 如何启动调度 一:问题由来 1:今天在做用laravel开发订单系统的时候,需要使用定时任务来大批量提交订单,测试一下订单金额是否有误.发现larav ...