浅谈Python中re.match()和re.search()的使用及区别

  • Post category:Python

浅谈Python中re.match()和re.search()的使用及区别

简介

Python中的re模块为我们提供了方便的正则表达式操作接口,其中re.match()re.search()是常用的两个函数。它们的作用是在字符串中搜索匹配特定规则的模式,并返回匹配结果。

re.match()

re.match(pattern, string, flags=0)函数的作用是尝试从字符串的起始位置匹配一个模式。如果匹配成功则返回一个Match对象,否则返回None。需要注意的是,re.match()只会匹配到字符串的开头。

下面是一个简单的例子:

import re

string = "Hello, World!"
match_result = re.match('He', string)

print(match_result.group())

输出结果:

He

在这个例子中,我们使用re.match()函数匹配字符串的开头是否以”He”开头,所以输出结果为”He”。

re.search()

re.search(pattern, string, flags=0)函数的作用是扫描整个字符串,并返回第一个成功匹配的结果。如果匹配成功则返回一个Match对象,否则返回None

下面是一个示例:

import re

string = "Hello, World!"
search_result = re.search('Wor', string)

print(search_result.group())

输出结果:

Wor

在这个例子中,我们使用re.search()函数在整个字符串中搜索是否含有”Wor”,所以输出结果为”Wor”。

区别

re.match()re.search()的主要区别在于搜索的位置不同:

  • re.match()只从字符串的开头进行匹配,只要在开头找到一个匹配的结果就返回,否则返回None
  • re.search()在整个字符串中进行搜索,并返回第一个满足匹配条件的子串。

如果需要精确匹配整个字符串,建议使用re.match()函数。如果需要在整个字符串中搜索匹配规则,则使用re.search()函数更为合适。

示例

下面是一个结合实际应用场景的示例:

import re

# 模拟获取网络请求返回的文本
text = """
    <html>
        <head>
            <title>Hello, World!</title>
        </head>
        <body>
            <div class="content">
                <h1>Hello, World!</h1>
                <p>This is an example for re module usage.</p>
            </div>
        </body>
    </html>
"""

# 使用re.search()方法查找 title 标签中的内容
match_title = re.search(r'<title>(.+?)</title>', text)

# 使用re.search()方法查找 div 标签 class 为 content 的内容
match_content = re.search(r'<div class="content">(.+?)</div>', text, re.DOTALL)

print("title:", match_title.group(1))
print("content:", match_content.group(1))

输出结果:

title: Hello, World!
content: 
                <h1>Hello, World!</h1>
                <p>This is an example for re module usage.</p>

在这个示例中,我们模拟获取到了一个包含HTML标签的网页文本,然后使用re.search()函数查找了其中title标签和div标签class="content"的内容。

需要注意的是,我们在匹配div标签时使用了re.DOTALL参数,这是为了匹配多行内容;同时,在正则表达式模式中的.+?表示匹配任意字符,且非贪婪模式(尽量少匹配字符)。

总结

在正则表达式匹配中,re.match()re.search()函数是我们经常用到的两个函数。根据需要匹配的位置不同,我们可以选择使用不同的函数进行匹配。需要注意的是,正则表达式的语法较为繁琐,需要耐心学习和练习。