python中re模块与正则表达式的介绍(附代码)

2019年8月31日14:47:39 评论 225

本篇文章给大家带来的内容是关于python中re模块与正则表达式的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

正则表达式规则,单字符匹配

字符功能正则表达式示例符合匹配示例
.匹配任意一个字符(除了n)b.bbab,b2b
[ ]匹配来自[]中字符集的任意一个字符i [abCde]mi am
\d匹配任何十进制数字,与[0-9]一致w\dcschoolw3cschool
\D匹配非数字,即不是数字mou\Dhmouth
\s匹配任何空格字符,与[\n\t\r\v\f]相同i\slikei like
\S匹配任何非空白字符,与\s相反n\Senoe,n3e
\w匹配任何字母数字字符,与[A-Za-z0-9_]相同[A-Za-z]w+
\W匹配非单词字符[0-9]\W[A-Z]3 A

表示数量匹配

字符功能正则表达式示例符合匹配的示例
*匹配0次或者多次前面出现的正则表达式,即可有可无a*aaa
+匹配前一个字符出现1次或者无限次,即至少有一次a+aaa
?匹配前一个字符出现1次或者0次,要么有一次,要么没有a?a或者b
{m}匹配前一个字符出现m次[0-9]{5}12345
{m.}匹配前一个字符至少出现m次a{5.}aaaaa
{m,n}匹配前一个字符出现从m到n次a{2,6}aaa

表示边界匹配

字符功能正则表达式示例
^匹配字符串起始部分^Dear
$匹配字符串终止部分fi$
b匹配任何单词的边界\bThe\b
B匹配非单词边界.*\Bver\

匹配分组

字符功能
\匹配左右任意一个表达式
(ab)将括号中字符作为一个分组
\num引用分组num匹配到的字符串
(?P<name>)分组起别名
(?P=name)引用别名为name分组匹配到的字符串

re模块

python中,可以使用内置的re模块来使用正则表达式

re模块常见的函数和方法

核心函数说明
compile(pattern,flags=0)使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象
re模块函数和正则表达式对象方法说明
match(pattern,string,flags=0)尝试使用带有可选的标记的正则表达式的模式来匹配字符串。如果匹配成功,就返回匹配对象; 如果失败,就返回 None
search(pattern,string,flags=0)使用可选标记搜索字符串中第一次出现的正则表达式模式。 如果匹配成功,则返回匹配对象; 如果失败,则返回 None
findall(pattern,string,[,flags])查找字符串中所有出现的正则表达式,并返回一个列表
split(pattern,string,max=0)根据正则表达式的模式分隔符,spilt函数将字符串分割为列表,然后返回成功匹配的列表,分割最多操作max次(默认分割所有匹配成功的位置)
sub(pattern,repl,string,count=0)使用repl替换所有正则表达式的模式在字符串中出现的位置,除非定义count,否则就将替换所有出现的位置
常用的匹配对象方法说明
group(num=0)默认返回整个匹配对象或者返回编号为num的特定子组
groups(default=None)返回一个包含所有匹配子组的元组,如果没有成功匹配,返回一个空元组
span()
常用的模块属性,大多数用于对正则表达式函数的修饰说明
re.I使匹配对大小写不敏感(忽略大小写)
re.S.(点号)匹配除了n之外的所有字符,re.S标记表示.(点号)能够匹配全部字符
re.M多行匹配,影响^和$
re.U根据Unicode字符集解析字符。影响\w,\W,\b和\B
re.X该标志通过给予你更灵活的格式以便你讲正则表达式写得更易于理解

re模块一般的使用方法

  1. 使用 compile() 函数将正则表达式的字符串形式编译为一个正则表达式对象;

  2. 通过正则表达式对象提供的一系列方法(如:match())对文本进行匹配查找,获得匹配结果,一个Match对象;

  3. 最后使用Match对象提供的属性和方法(例如:group())获得信息,根据需要进行其他的操作。

re模块使用示例

导入模块

import re

compile()函数
compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下:

import re

# 将正则表达式编译成pattern对象
pattern = re.compile(r'\d+')

编译成正则表达式对象后,就可以使用上面所说的正则表达式对象方法了。

match()方法
match 方法用于查找字符串的头部(也可以指定起始位置),它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。它的一般使用形式如下:

match(string[, pos[, endpos]])

其中,string是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始终点位置,默认值分别是 0 和 len (字符串长度)。因此,当你不指定 pos 和 endpos 时,match 方法默认匹配字符串的头部。

当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。

>>> import re
>>> 
>>> pattern = re.compile(r'\d+') # 正则表达式表示匹配至少一个数字
>>> 
>>> m = pattern.match("one2three4") # match默认从开头开始匹配,开头是字母o,所以没有匹配成功
>>> print(m) # 匹配失败返回None
None
>>> 
>>> m = pattern.match("1two3four") # 开头字符是数字,匹配成功
>>> print(m)
<_sre.SRE_Match object; span=(0, 1), match='1'>
>>> 
>>> m.group() # group()方法获取匹配成功的字符
'1'
>>> m = pattern.match("onetwo3four56",6,12) # 指定match从数字3开始查找,第一个是数字3,匹配成功
>>> print(m)
<_sre.SRE_Match object; span=(6, 7), match='3'>
>>> m.group()
'3'

以上就是python中re模块与正则表达式的介绍(附代码)的详细内容,更多请关注php教程其它相关文章!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: