python与正则表达式

网友投稿 260 2022-09-16

python与正则表达式

正则表达式

推荐一本书:《Sams Teach Yourself Regular Expressions in 10 Minutes》。 下面列举常用的regex元字符。

元字符

作用

.

任意字符匹配

\

转义特殊字符

[ ]

使用[和]来包含一个字符集合,代表和其中任意一个成员匹配的文本

\w

字母、数字

\d

数字

( )

常常用于子表达式的构建

\E

结束\L或\U的转换

\U

将\U和\E之间的字符全部转换成大写字符

\L

将\L和\E之间的字符全部转换成小写字符

\u

将\u后面的字符或者子集变成大写字符

\l

将\l后面的字符或者子集变成小写字符

[\b]

回退删除 backspace

\f

换页

\n

换行

\r

回车

\t

制表符 tab

\v

垂直制表符

\s

空白符

\b

匹配着这样的位置:位于一个能构成单词的字符(字母,数字,下划线。\w)和不能构成单词的字符(\W)之间对于cat scatter文本,\bcat\b仅仅匹配第一个单词cat

*

匹配0个或者多个

+

匹配至少一个

{n,m}

匹配n到m个

贪婪型元字符

懒惰型元字符

*

*?

+

+?

{n,}

{n,}?

书中提到的正则表达式测试器,可下载:​​ 是一个很棒的用于练习正则表达式的文本工具。

正则表达式在python中的应用

正则表达式模式匹配

正则表达式模块re是python自带的。 基本步骤:

导入re库创建Regex对象搜索并返回match对象返回匹配的字符串

>>> import re>>> regex = re.compile(r"\d{3}-\d{3}-\d{4}")>>> match = regex.search('231-345-8972')>>> print(match.group())231-345-8972

正则分组

通过group返回正则分组

>>> import re>>> regEx = re.compile(r'(\d{3})-(\d{3})-(\d{4})')>>> mo = regEx.search('231-345-8972')>>> mo.group(1)'231'>>> mo.group(2)'345'>>> mo.group(3)'8972'>>> mo.group(0)'231-345-8972'>>>

返回所有的分组

>>> mo.groups()('231', '345', '8972')

正则表达式的贪心和非贪心

​​?​​在正则表达式中可以表示可选,也能表示非贪心匹配。

#! /usr/bin/pythonimport rebatRegex = re.compile(r'(Ha){3,5}')mo = batRegex.search('HaHaHaHaHa')print(mo.group())batRegex = re.compile(r'(Ha){3,5}?')mo = batRegex.search('HaHaHaHaHa')print(mo.group())

执行:

[edemon@CentOS workspace]$ ./regex.py HaHaHaHaHaHaHaHa

regex对象的search和findall

search方法在找到第一个匹配的内容后即停止了工作,但是findall会返回所有的字符串,以list的形式供我们处理。

#! /usr/bin/pythonimport retext = '''231-345-8972213-324-5476'''print("origin text is:\n"+text)regex = re.compile(r'\d{3}-\d{3}-\d{4}')mo = regex.search(text)print("search result is:" + str(mo.group()))rlist = regex.findall(text)print("findall result is:"

运行效果:

[edemon@CentOS workspace]$ ./regex.py origin text is:231-345-8972213-324-5476search result is:231-345-8972findall result is:['231-345-8972', '213-324-5476']

常用字符分类缩写

分类字符

表示

\d

0-9的任何数字

\D

除0-9的数字以外的字符

\w

字母、数字、下划线字符

\W

除字母、数字、下划线以外的任何字符

\s

空白字符(空格、制表符、换行符)

\S

除空白字符以外的字符

匹配换行

如果使得re.DOTALL作为re.compile()第二个参数,那么​​.​​将匹配所有的字符,包括换行。

re.DOTALL Make the ‘.’ special character match any character at all, including a newline; without this flag, ‘.’ will match anything except a newline.

不区分大小写的匹配

给re.compile()传入第二个参数re.IGNORECASE或re.I则不理会字母的大小写。 如下:

import retext = 'Hello World'mo = re.compile('hello world',re.I)print(mo.search(text).group())# Hello World

VERBOSE

compile的flag: re.VERBOSE可使得正则表达式中的注释、多余空白字符都被忽略。这样增强了阅读性。

更多的应用技巧,需要靠实践掌握了。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ubuntu 16.04 搭建lamp的苦逼经历
下一篇:ubuntu 16.04 openjdk安装配置 、phpEclipse插件安装、配置Xdebug
相关文章

 发表评论

暂时没有评论,来抢沙发吧~