re模块之re.match

re模块——python 正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。
re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

  • 问题:从以下文件里取出所有的手机号:

    姓名 地区 身高 体重 电话
    况咏蜜 北京 171 48 13651054608
    王心颜 上海 169 46 13813234424
    马纤羽 深圳 173 50 13744234523
    乔亦菲 广州 172 52 15823423525
    罗梦竹 北京 175 49 18623423421
    刘诺涵 北京 170 48 18623423765
    岳妮妮 深圳 177 54 18835324553
    贺婉萱 深圳 174 52 18933434452
    叶梓萱 上海 171 49 18042432324
    杜姗姗 北京 167 49 13324523342

常用的办法:使用for语句读取每一行,然后取出每一条line 中的位数为11的数字串。

f = open('phone_num', 'r', encoding='utf-8')
phones = []

for line in f:
    name, city, height, weight, phone = line.split()
    if phone.startswith('1') and len(phone) == 11:
        phones.append(phone)

print(phones)

如果使用re模块,该如何实现呢?

import re
f = open('phone_num', 'r', encoding='utf-8')
data = f.read()
phones = re.findall('[0-9]{11}', data)
phones_1 = re.match('[0-9]', data)
phones_2 = re.search('[0-9]', data)
phones_3 = re.findall('[0-9]{11}', data)
print(phones)
print(phones_1)
print(phones_2)
print(phones_3)

输出的结果为:

phones = ['13651054608', '13813234424', '13744234523', '15823423525', '18623423421', '18623423765', '18835324553', '18933434452', '18042432324', '13324523342']
phones_1 = None
phones_2 = <_sre.SRE_Match object; span=(27, 28), match='2'>
phones_3 = ['13651054608', '13813234424', '13744234523', '15823423525', '18623423421', '18623423765', '18835324553', '18933434452', '18042432324', '13324523342']

re的匹配语法有以下几种:

  • re.match 从头开始匹配
  • re.search 匹配包含
  • re.findall 把所有匹配到的字符放到以列表中的元素返回
  • re.split 以匹配到的字符当做列表分隔符
  • re.sub 匹配字符并替换
  • re.fullmatch 全部匹配

    1. re.match

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

    1.1 函数语法:

  • re.match(pattern, string, flags=0)

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

比如,在上面的例子中,re.match('[0-9]{11}', data):
[0-9]:匹配的表达式,如果字符串的开头满足是数字,那么就返回这个值;
{11}:如果该字符串为11位,那么就返回;
data:要匹配的字符串,本例中就是phone_num文件中的内容。
匹配成功re.match方法返回一个匹配的对象,否则返回None;我们也可以用group(num)或者groups()匹配对象函数来获取匹配表达式。

匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

实例一:

实例二:

猜你喜欢

转载自www.cnblogs.com/GGGGGGZX/p/9185434.html