您的位置:

re.match详解

一、re.match简介

re是Python正则表达式模块,它提供了一种方便的方式来使用正则表达式。

re模块中的match()方法是最常用的方法。re.match()方法只匹配字符串的开始部分,如果字符串开始部分不匹配,则整个匹配失败,函数返回None。

match()方法的语法如下:

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

其中,pattern表示要匹配的正则表达式,string表示要匹配的字符串,flags是一个可选参数,用于控制正则表达式的匹配方式。

二、re.match方法的返回值

当re.match()方法匹配成功,返回一个匹配对象;如果匹配失败,则返回None。

匹配对象有许多属性和方法,可以帮助我们进一步处理匹配结果。

当使用match()方法匹配成功后,可以通过group()方法获取匹配的结果。例如:

import re

text = "hello, world"
pattern = "hello"

result = re.match(pattern, text)

print(result.group()) # 输出:hello

此处,首先定义了一个字符串text和一个正则表达式pattern,然后使用match()方法对text字符串进行匹配。由于text字符串的开始部分包含了正则表达式pattern的内容,所以返回了一个匹配对象result。最后,使用group()方法获取匹配到的结果“hello”。

需要注意的是,如果正则表达式中使用了分组,可以通过group()方法获取分组匹配到的结果。例如:

import re

text = "hello, world"
pattern = "(he)(lo)"

result = re.match(pattern, text)

print(result.group())   # 输出:hello
print(result.group(1))  # 输出:he
print(result.group(2))  # 输出:lo

三、re.match方法的用法示例

1、使用re.match()方法验证身份证号码格式是否正确

身份证号码一般由18位数字组成,其中最后一位可以是数字或者X。下面是一个验证身份证号码格式是否正确的示例:

import re

def check_id(id_num):
    pattern = r"^\d{17}(\d|X)$"
    result = re.match(pattern, id_num)
    if result:
        return True
    else:
        return False

id_num1 = "370781199912011234"
id_num2 = "37078119991201123X"
id_num3 = "37078119991201123Y"

print(check_id(id_num1)) # 输出:True
print(check_id(id_num2)) # 输出:True
print(check_id(id_num3)) # 输出:False

该示例中,使用了正则表达式“^\d{17}(\d|X)$”来匹配身份证号码。其中,^表示字符串开头,\d表示数字,{17}表示匹配前面的\d重复17次,(\d|X)表示匹配一个数字或者X,$表示字符串结尾。如果匹配成功,返回True;否则,返回False。

2、使用re.match()方法获取HTML页面中的所有链接

下面是一个示例,用于从HTML页面中获取所有链接:

import re
import urllib.request

def extract_links(url):
    # 读取网页内容
    with urllib.request.urlopen(url) as f:
        content = f.read().decode('utf-8')

    # 提取所有链接
    pattern = r'href=[\'"](.*?)[\'"]'
    links = re.findall(pattern, content)

    return links

url = "http://www.baidu.com/"
links = extract_links(url)

for link in links:
    print(link)

该示例中,首先使用urllib库访问URL,然后使用正则表达式提取链接地址。正则表达式“href=[\'"](.*?)[\'"]”用于匹配HTML页面中的链接地址。其中,.*?表示匹配任意字符(不包括换行符)任意次,?表示尽可能少地匹配。输出所有获取到的链接地址。

3、使用re.match()方法替换字符串中的数字为星号

下面是一个示例,用于将字符串中的数字替换为星号:

import re

def replace_number(text):
    pattern = r'\d'
    result = re.sub(pattern, "*", text)
    return result

text = "123abc456def789ghi"
result = replace_number(text)

print(result)  # 输出:“***abc***def***ghi”

该示例中,首先定义了一个字符串text,然后使用正则表达式“\d”匹配数字。使用re.sub()方法将匹配到的数字替换为星号,最后返回替换后的字符串。