接上个博客:

python正则re学习记录(之二)


re.match函数

re.match() 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none

函数语法:

re.match(匹配的正则表达式, 要匹配的字符串, 可选标志位)

例如:

>>> import re
>>> str = 'www.yuaneuro.cn'
>>> re.match('www',str)
<re.Match object; span=(0, 3), match='www'> 

匹配成功re.match方法返回一个匹配的对象,否则返回None

如果上一步匹配到数据的话,可以使用group()来提取数据

>>> r = re.match('www',str)
>>> r.group()
'www'

re.search方法

re.search() 扫描整个字符串并返回第一个成功的匹配

函数语法:

re.search(匹配的正则表达式, 要匹配的字符串, 可选标志位)

匹配成功re.search方法返回一个匹配的对象,否则返回None。

如果上一步匹配到数据的话,可以使用group()来提取数据

例子和上面那个大同小异,那么它俩有什么区别呢?


re.match与re.search的区别

  • re.match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None
  • re.search 匹配整个字符串,直到找到一个匹配。

例如:

import re

str = 'www.yuaneuro.cn'

a = re.match('www', str)
b = re.match('cn', str)
c = re.search('www', str)
d = re.search('cn', str)

print(a)
print(b)
print(c)
print(d)

运行结果:

可以看出使用re.match匹配cn时开头没有,所以直接返回None
其余的可以用group方法来提取数据


re.sub函数

Python的re模块提供了re.sub用于替换字符串中的匹配项

函数语法:

re.sub(pattern, repl, string, count=0, flags=0)

参数:

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
  • flags : 编译时用的匹配模式,数字形式。

例如:

import re

str = 'yxxxanerxxxo'

r = re.sub('xxx', 'u', str, 2)
print(r)

运行结果:

yuaneuro

上述例子将str中的xxx换成了u且替换了两个


re.compile 函数

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
函数语法:

re.compile(pattern[, flags])
  • 如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配。

例如:

import re

# 编译:
re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
# 使用:
a = re_telephone.match('010-12345').groups()
b = re_telephone.match('010-8086').groups()

print(a)
print(b)

运行结果:

('010', '12345')
('010', '8086')

正则表达式修饰符 - 可选标志

修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

本文作者:Author:     文章标题:python正则re学习记录(之三)
本文地址:https://yuaneuro.cn/archives/62.html     
版权说明:若无注明,本文皆为“yuaneuro的小站”原创,转载请保留文章出处。
Last modification:April 19th, 2020 at 03:12 pm
如果觉得我的文章对你有用,请随意赞赏