python正则表达式及使用正则表达式的例子
作者:曲径通幽处 发布时间:2021-07-28 20:15:41
正则表达式
正则表达用来匹配字符串
正则表达式匹配过程
依次拿出表达式和文本中的字符串进行比价
如果每个字符都能匹配,则匹配成功;一旦有匹配不成功的字符,则匹配失败
如果有量词和边界,则匹配过程稍微有些不同
正则表达式语法规则
语法 | 说明 | 表达式实例 | 匹配字符串 |
字符 | |||
. | 匹配除换行"\n"外的任意字符串 | abc | abc |
\ | 转义字符,使后一个字符改变原来的意思 | a\\c | a\c |
[...] | 字符集,对应的位置可以是字符集中任意字符,字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。第一个字符如果是^则表示取反,如[^abc]表示不是abc中的其他字符。所有的特殊的字符在字符集中都失去其原有的特殊含义。在字符集中使用^、]或-,可以使用转义字符匹配它们 | a[bcd]e | abe ace ade |
预定义字符集 | |||
\d | 数字:[0-9] | a\dc | a1c |
\D | 非数字:[^0-9] | a\Dc | abc |
\s | 空白字符:[<空格>\t\r\n\f\v] | a\sc | a c |
\S | 非空白字符:[^\s] | a\Sc | abc |
\w | 单词字符:[a-zA-z0-9_] | a\wc | abc |
\W | 非单词字符:[^\w] | a\Wc | a c |
数量词 | |||
* | 匹配一个字符串0或无限次 | abc* | ab abc abccc |
+ | 匹配一个字符串1次或无限次 | abc+ | abc abccc |
? | 匹配一个字符串0次或1次 | abc? | ab abc |
{m} | 匹配一个字符串m次 | abc{2} | abcc |
{m,n} | 匹配一个字符串m到n次 | abc{2,3} | abcc abccc |
边界匹配 | |||
^ | 匹配字符串开头 | ^abc | abc |
$ | 匹配字符串末尾 | abc$ | abc |
\A | 匹配字符串开始 | \Aabc | abc |
\Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 | abc\Z | abc |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 | ||
\B | 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 | ||
逻辑分组 | |||
| | 匹配|表达式左右的任意一个 | abc|def | abc def |
(...) | 作为分组,每遇到一个(,分组编号加1,使用分组的好处是匹配的子串会保存到一个子组,便于以后使用 | (abc){2} | abcabc |
(?P<name>...) | 分组除原有编号外,再加一个别名 | (?P<id>abc){2} | abcabc |
\<number> | 引用编号为number的分组匹配到的字符串 | (\d)ab\1 | 1ab1 5ab5 |
(?P=name) | 应用别名为name的分组匹配到的字符串 | (?P<id>abc)ee(?P=name) | abceeabc |
特殊构造(不分组) | |||
(?:...) | (...)的不分组版本,用于|或后接数量词 | (?:abc){2} | abcabc |
(?iLmsux) | iLmsux中的每个字符代表正则表达式的一种匹配模式,只能用在正则表达式开头,可选多个 | (?i)abc | AbC |
(?#...) | 将#后面的字符当做注释忽略 | abc(?#comment)def | abcdef |
(?=...) | 之后的字符串表达式需要匹配才能成功,不消耗字符串内容 | a(?=\d) | 后面是数字的a |
(?!...) | 之后的字符串表达式需要不匹配才能成功,不消耗字符串内容 | a(?!\d) | 后面不是数字的a |
(?<=...) | 之前的字符串表达式需要匹配才能成功,不消耗字符串内容 | (?<=\d)a | 前面是数字的a |
(?<!...) | 之前的字符串表达式需要不匹配才能成功,不消耗字符串内容 | (?<!\d)a | 前面不是数字的a |
(?(id/name)yes_ pattern|no_parttern) | 如果匹配到分组为id或别名name的字符串成功匹配,则需要匹配yes_pattern 不成功,怎需要匹配no_pattern | (\d)abc(?(1)\d|def) | 1abc3 abcdef |
贪婪模式和非贪婪模式
贪婪模式是尽可能多的匹配字符串,python默认为贪婪模式,非贪婪模式尽可能少的匹配字符串,在正则表达式后面加个?表示非贪婪模式。例如:字符串abcccb,贪婪模式正则表达式为ab.*c,非贪婪模式的正则表达式为ab.*?c,贪婪模式结果为abccc,非贪婪模式结果为abc,再比如字符串abbb,贪婪模式正则表达式为ab?,非贪婪模式正则表达为ab??,贪婪模式结果为ab,非贪婪结果为a。
python的re模块
re模块的方法:
1.compile(pattern[,flag]):对正则表达式pattern进行编译,编译后比直接查找速度快
2.match(patter,string[,flag]):从字符串string的开始就匹配,若匹配成功,则返回匹配对象,否则返回None(None对象没有group()和groups()方法,不判断直接调用这两个方法,则会出现异常)
3.search(pattern,string[,flag]):从字符串中查找,若匹配成功,则返回匹配对象,否则返回None
4.findall(pattern,string[,flag]):在字符串 string 中查找正则表达式模式 pattern 的所有(非重复)出现;返回一个匹配对象的列表
5.finditer(pattern,string[, flags])b 和 findall()相同,但返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个匹配对象
6.split(pattern,string, max=0) 根据正则表达式 pattern 中的分隔符把字符 string 分割为一个列表,返回成功匹配的列表,最多分割 max 次(默认是分割所有匹配的地方)
7.sub(pattern, repl, string, max=0) 把字符串 string 中所有匹配正则表达式 pattern 的地方替换成字符串 repl,如果 max 的值没有给出, 则对所有匹配的地方进行替换
匹配对象的方法和属性:
string:匹配时所使用的文本
re:匹配时使用的pattern对象
group(num=0) 返回全部匹配对象(或指定编号是 num 的子组)
groups() 返回一个包含全部匹配的子组的元组(如果没有成功匹配,就返回一个空元组)
参数flag:
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
python使用正则表达式的例子
>>> import re
>>> pattern = re.compile(r'foo')
>>> res1 = re.search(pattern,'foo')
>>> res1.group() # 返回的是匹配对象,需要调用group()方法,显示所有的匹配对象
'foo'
>>> res1.groups()# 因为没有子组(即正则表达式中没有分组),返回空元组
()
>>> res2 = re.findall(pattern,'foobbfoo')
>>> res2 # 直接返回的是一个列表,包含所有匹配的字符
['foo', 'foo']
>>> pattern2 = re.compile(r'(\d+)aa')
>>> res3 = re.search(pattern2,'bb32aa')
>>> res3.group() # 返回所有的匹配的对象
'32aa'
>>> res3.groups() # 对比res1的groups(),正则里有分组,返回匹配到的分组
('32',)
>>> res4 = re.findall(pattern2,'bb32aacc5aacc')
>>> res4 # 对比res2,返回一个列表,但只包含所匹配分组里面的字符,
['32', '5']
总结
以上所述是小编给大家介绍的python正则表达式及使用正则表达式的例子网站的支持!
来源:http://www.cnblogs.com/time-read/p/8319477.html


猜你喜欢
- class Helper_Page{ /** 总信息数 */ var $infoCount; /** 总页数 */ var $pageCou
- 如下:数据文件:上海机场 (sh600009)24.113.58东风汽车 (sh600006)74.251.74中国国贸 (sh600007
- 前言今天就来理一理session、cookie、token这三者之间的关系!1.为什么会有它们?我们都知道 HTTP 协议是无状态的,所谓的
- shutil --High-level file operations 高级的文件操作模块os模块提供了对目录或者文件的新建/删除/查看文件
- 这篇文章主要介绍了python列表生成器迭代器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 需要准备的工具:SQL Query Analyzer和SqlExec Sunx Version第一部分:去掉xp_cmdshell保护系统的
- 1. 永远不要停止学习和阅读 阅读 书籍,而不只是网站 阅读 只为自我提升,而不是为了下一个项目 阅读 提升你的基础,而不只是最新技术 2.
- 在本地安装mysql的服务端,打开cmd,cd到mysql安装目录下的bin目录,bin目录中可以看到多个可执行文件,其中mysqladmi
- 本文实例为大家分享了python七夕浪漫表白的具体代码,供大家参考,具体内容如下from turtle import *from time
- 一.需求统计收集各个实例上table的信息,主要是表的记录数及大小。收集的范围是cmdb中所有的数据库实例。二.公共基础文件说明1.配置文件
- 1、首先,根据自己的机子到MySQL官网下载对应的数据库https://dev.mysql.com/downloads/mysql/2、利用
- 函数:split()Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串。通过指
- 代码如下:<% dim objconn,connstr Set objconn =&
- 背景众所周知,go语言可打包成目标平台二进制文件是其一大优势,如此go项目在服务器不需要配置go环境和依赖就可跑起来。操作需求:打包部署到c
- 依托于互联网的发达,我们可以随时随地利用一些等车或坐地铁的碎片时间学习以及了解资讯。同时发达的互联网也方便人们能够快速分享自己的知识,与相同
- 当系统出现故障时,只要存在数据日志那么就可以利用它来恢复数据解决数据库故障。作为SQL Server数据库管理员,了解数据日志文件的作用,以
- 1、二维数组取值注:不管是二维数组,还是一维数组,数组里的数据类型要一模一样,即若是数值型,全为数值型#二维数组import numpy a
- 一、遍历函数(map)map函数用于遍历序列,对序列中每个元素进行操作,最终获取新的序列。lis=[2,3,4,5]new_list=map
- 大家好,我是不学前端的前端程序员,事情是这个样子的,前几天不是双十一预购秒杀嘛由于我女朋友比较笨,手速比较慢,就一直抢不到,她没抢到特价商品
- plotly 的 Python 软件包是一个开源的代码库,它基于 plot.js,而后者基于 d3.js。我们实际使用的则是一个对 plot