re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
语法:re.match(pattern, string, flags=0)
参数:
选项 | 作用描述 |
---|---|
re.I | 忽略大小写 |
re.L | 字符集本地化,用于多语言环境 |
re.M | 多行匹配 |
re.S | 使. 匹配包括\n 在内的所有字符 |
re.X | 忽略正则表达式中的空白,换行,以便添加注释 |
import re
def main():
names = ['name1', '_name', '2_name', '__name__', 'age!']
for name in names:
ret = re.match('[a-zA-Z_]+[\w]$', name)
if ret:
print('变量名 %s 符合要求,通过正则匹配的数据是%s' % (name, ret.group()))
else:
print('变量名 %s 非法' % name)
if __name__ == '__main__':
main()
# match默认从头开始匹配
# group():用于获得一个或多个分组匹配的字符串,当要获得整个匹配的字符串时,可直接使用group()或group(0)
re.search匹配整个字符串(全文搜索),直到找到一个匹配。
语法:re.search(pattern, string, flags=0)
参数:
string:要匹配的字符串
flags:标志位,控制正则表达式的匹配方式
re.match和re.search基本语法是一样的,区别在于re.match只匹配字符串的开始,如果字符串的开始不符合正则表达式,匹配失败,返回None;而re.search匹配整个字符串(全文搜索),直到找到一个匹配。
import re
line = 'Cats are smarter than dogs'
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print('matchObj.group(): ', matchObj.group())
print('matchObj.group(1): ', matchObj.group(1))
print('matchObj.group(2): ', matchObj.group(2))
else:
print('not match!')
"""
执行结果:
searchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats
searchObj.group(2) : smarter
"""
用于替换字符串的匹配项
语法:re.sub(pattern, repl, string, count=0, flags=0)
参数:
import re
phone = "2004-959-559 # 这是一个电话号码"
# 删除注释
num = re.sub(r'#.*$', "", phone)
print ("电话号码 : ", num)
# 移除非数字的内容
num = re.sub(r'\D', "", phone)
print ("电话号码 : ", num)
"""
执行结果:
电话号码 : 2004-959-559
电话号码 : 2004959559
"""
repl也可以是函数
def num(temp):
str_num = temp.group()
num = int(str_num) + 1
return str(num)
ret = re.sub(r'\d+', num, 'num = 999')
print(ret)
# 结果:num = 1000
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
语法:re.compile(pattern[, flags])
参数:
>>> import re
>>> pattern = re.compile(r'\d+')
>>> m = pattern.match('abcdefg1234567qwer')
>>> print(m)
None
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
语法:re.findall(string[, pos[, endpos]])
参数:
>>> import re
>>>
>>> pattern = re.compile(r'\d+')
>>> pattern.findall('runoob 123 google 456')
['123', '456']
>>> pattern.findall('asjdjs234ksksk432')
['234', '432']
>>>
匹配号码
import re
pattern = re.compile(r'[\(]?\d{3}[\)-]?\d{8}|[\(]?\d{4}[\)-]\d{7}')
te1 = '010-12345678'
te2 = '0518-1234567'
te3 = '(010)12345678'
te4 = '(0518)1234567'
ret1 = pattern.match(te1).group()
ret2 = pattern.match(te2).group()
ret3 = pattern.match(te3).group()
ret4 = pattern.match(te4).group()
print(ret1)
print(ret2)
print(ret3)
print(ret4)
匹配邮件
import re
def main():
mail = input('请输入邮箱地址: ')
ret = re.match(r'[a-zA-Z_0-9]{4,20}@(139|126|163|qq|gmail|foxmail)\.com$', mail)
if ret:
print('邮箱: %s 符合要求,匹配出来的数据是%s' % (mail, ret.group()))
else:
print('邮箱: %s 非法' % mail)
if __name__ == '__main__':
main()
原文:https://www.cnblogs.com/dhzg/p/11355583.html