Python基础13_正则表达式,re模块,

一. 正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式由普通字符和元字符组成, 普通字符包含大小写字母, 数字. 在匹配普通字符的时候我们直接写就可以了

元字符是正则表达式的灵魂

1. 字符组

字符组用[]括起来, 在[]中的内容会被匹配

[a-zA-Z0-9]    表示所有的数字字母

2. 简单元字符

.    匹配除换行符之外的任意字符

\w    匹配数字或字母或下划线

\s    匹配任意的空白符

\d    匹配数字

\n    匹配一个换行符

\t    匹配一个制表符

\b    匹配一个单词的边界

^    匹配字符串的开始

$    匹配字符串的结尾

\W    匹配非字母或数字或下划线

\D    匹配非数字

\S    匹配非空白符

a|b    匹配字符a或字符b

()    匹配括号内的表达式, 也表示一个组

[...]    匹配字符组中的字符

[^...]    匹配除了字符组中字符的所有字符

3. 量词

*    重复0次或更多次

+    重复1次或更多次

?    重复0次或1次

{n}    重复n次

{n, }    重复n次或更多次

{n, m}    重复n次到m次

4. 惯性匹配和贪婪匹配

* + {} 都属于贪婪匹配, 就是尽量多的匹配到结果

在使用.*后再加?就是尽可能的少匹配, 表示惰性匹配

.*?x    表示找到下一个x为止

5. 分组

使用()进行分组

6. 转义

在python中, 无论是正则表达式还是待匹配的内容, 都是以字符串的内容出现的

r"\\n" 表示正则的r"\n"

二. re模块

import re

python提供的一套关于处理正则表达式的模块

1. findall()    查找所有, 返回list

result = re.findall("\d", "asdf123asdf456")

print(result)

# [‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘]

2. search()        进行匹配, 但是如果匹配到第一个结果, 就会返回该结果, 匹配不到则返回None

result = re.search("\d", "asdf123asdf456")

print(result.group())

# 1

3. match()        只能从字符串的开头进行匹配, 匹配不到则返回None

result = re.match("\d", "asdf123asdf456")

print(result.group())

# AttributeError: ‘NoneType‘ object has no attribute ‘group‘

4. finditer()    和findall用法相似, 但返回的是迭代器

result = re.finditer("\d+", "asdf123asdf456")

print(result)

<callable_iterator object at 0x029A28D0>

for el in result:

print(el.group())

# 123

# 456

5. split()        用多个元素去切割

ret = re.split("[ab]", "qweabdfdadffbffs")

print(ret)

# [‘qwe‘, ‘‘, ‘dfd‘, ‘dff‘, ‘ffs‘]

6. sub()        替换

ret = re.sub(r"\d+", "_sb_", "faf123fsfs456dsf")

print(ret)

# faf_sb_fsfs_sb_dsf

7. subn()        替换, 替换了多少次

ret = re.subn(r"\d+", "_sb_", "faf123fsfs456dsf")

print(ret)

# (‘faf_sb_fsfs_sb_dsf‘, 2)

8. compile()    将正则表达式编译成一个正则表达式对象

obj = re.compile(r"\d{3}")

ret = obj.search("sfdaf13321fasf123fffsaf")

print(ret.group())

# 133

9. 爬虫的一个重点, 分组命名

result = re.finditer("姓名: (?P<name>.*?), 爱好: (?P<hobby>.*?),", "姓名: 宝宝, 爱好: 女, 年龄: 18")

for el in result:

print(el.group("name"), el.group("hobby"))

# 宝宝 女

坑1 分组合取消分组权限

这里因为findall会优先把匹配结果组里的内容返回, 如果想要匹配结果, 取消权限即可

ret = re.findall("www.(baidu|oldboy).com", "www.oldboy.com")

print(ret)

# [‘oldboy‘]

?: 相当于取消了分组的权限

ret = re.findall("www.(?:baidu|oldboy).com", "www.oldboy.com")

print(ret)

# [‘www.oldboy.com‘]

坑2 split切割 分组加()的结果

# 坑2

ret = re.split("\d+", "asf3faf4asdf")

print(ret)

# [‘asf‘, ‘faf‘, ‘asdf‘]

ret = re.split("(\d+)", "asf3faf4asdf")

print(ret)

# [‘asf‘, ‘3‘, ‘faf‘, ‘4‘, ‘asdf‘]

在匹配部分加上()后切出来的结果是不同的

没有()则没有保留所匹配的项, 有()则保留了匹配的项

这个在某些需要保留匹配部分的使用过程是非常重要的

原文地址:https://www.cnblogs.com/guyannanfei/p/10196214.html

时间: 2024-12-17 20:57:26

Python基础13_正则表达式,re模块,的相关文章

python基础学习日志day5-各模块文章导航

python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html python基础学习日志day5---time和datetime模块 http://www.cnblogs.com/lixiang1013/p/6848245.html python基础学习日志day5---random模块http://www.cnblogs.com/lixiang1013/p/6849162.html python基础学习日志da

Python基础(12)--模块

本文地址:http://www.cnblogs.com/archimedes/p/python-modules.html,转载请注明源地址. 模块简介 如果你退出 Python 解释器重新进入,以前创建的一切定义(变量和函数)就全部丢失了.因此,如果你想写一些长久保存的程序,最好使用一个文本编辑器来编写程序,把保存好的文件输入解释器.我们称之为创建一个脚本.程序变得更长一些了,你可能为了方便维护而把它分离成几个文件.你也可能想要在几个程序中都使用一个常用的函数,但是不想把它的定义复制到每一个程序

Python基础之 正则表达式指南

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 尊重作者的劳动,转载请注明作者及原文地址 >.<html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法

python基础之正则表达式

什么是正则表达式? 正则表达式并不仅仅是python的专利,几乎其他的语言都有正则表达式.就比如bash就有正则表达式命令--grep,个人感觉python中的正则表达式类似于 grep -o 正则表达式是用于处理字符串的强大工具,虽然效率上可能不高,但是功能强大! 正则表达式设定了一系列语法,比如说“ . ”表示任意单个字符,\d表示单个数字……  通过组合这些规则我们可以形成一个pattern(模式)!凡是符合这个pattern的字符串,我们就认为它被匹配了,否则,则代表这个字符串是不合法的

Python基础第四篇—模块

一.模块 模块,是用一堆代码实现了某个功能的代码集合,模块分为三种:自定义模块(自己定义).内置模块(python自带).开源模块 导入模块 (1).导入一个py文件,解释器解释该py文件 (2).导入一个包,解释器解释该包下的 __init__.py 文件 #模块导入 import module from module.xx import xx from module.xx.xx import * from module.xx.xx import xx as rename #自己给模块定义一个

python 基础学习 正则表达式2(使用)

~使用正则表达式   - re模块提供了一个正则表达式引擎的接口,可以让你将REstring编译成对象并用他们来进行匹配. #如果经常使用,建议编译 compile 范例: >>> r1=r'^\d{3,4}-?\d{8}' >>> re.findall(r1,'010-12345678') ['010-12345678'] >>> p_tel=re.compile(r1)   #正则编译,变为对象,利用re模块里的complie方法对r1编译: &g

python基础-常用内建模块

一.collections:内建集合模块. 1.namedtuple:创建一个自定义的tuple对象 2.deque:为了高效实现插入和删除操作的双向列表,适合用于队列和栈 3.defaultdict:Key不存在时返回默认值 4.OrderedDict:保持Key的顺序 5.Counter:一个简单的计数器 二.base64 : 一种用64个字符来表示任意二进制数据的方法 三.struct : str和其他二进制数据类型的转换 四.hashlib : 提供常见的摘要算法,如MD5,SHA1 五

第六章:Python基础の反射与常用模块解密

本課主題 反射 Mapping 介绍和操作实战 模块介绍和操作实战 random 模块 time 和 datetime 模块 logging 模块 sys 模块 os 模块 hashlib 模块 re 模块 本周作业 反射 Mapping 介绍和操作实战 反射是利用字符串的形式去对象 (模块) 中操作 (寻找/检查) 成员 案例例子 假设创建了一个common.py 程序里而有3个功能,比如网站里的登录页面.主页页面还有登出页面都是不同的页面,要显示的内容都不一样. def login(): p

Python基础 :正则表达式

一.前言 1.1正则表达式简述 正则表达式是一种查找以及字符串替换操作.正则表达式在文本编辑器中广泛使用,比如正则表达式被用于: 1.检查文本中是否含有指定的特征词 2.找出文中匹配特征词的位置 3.从文本中提取信息,比如:字符串的子串 4.修改文本 与文本编辑器相似,几乎所有的高级编程语言都支持正则表达式.在这样的语境下,"文本"也就是一个字符串,可以执行的操作都是类似的.一些编程语言(比如Perl,JavaScript)会检查正则表达式的语法. 1.2 常用的正则匹配工具 在线匹配