python正则表达式之re.match()与re.search()的用法及区别

  • Post category:Python

Python正则表达式之re.match()与re.search()的用法及区别

在Python中,re模块提供了两个函数re.match()和re.search(),用于在字符串中搜索匹配正则表达式的子串。本文将详细讲解这两个函数的用法及区别,包括正则表达式语法、re模块函数和两个示例说明。

正则表达式语法

在Python中,正则表达式语法与其他语言的正则表达式语法类似。以下是一些常用的正则表达式语法:

  • ^:匹配字符串开头。
  • $:匹配字符串的结尾。
  • []:匹配字符集合中的任意一个字符。
  • [^]:匹配不在集合中的任意一个字符。
  • \d:匹配数字。
  • \w:匹配字母、数字、下划线。
  • ():用于组。
  • *:匹配0次或多次。
  • +:匹配1次或多次。
  • ?:匹配0次或1次。
  • {n}:匹配n次。
  • {n,}:匹配n次或多次。
  • {n,m}:匹配到m次。
  • |或运算符。

re模块函数

在Python中,我们可以使用re模块来处理正则表达式。以下是一些常用的模块函数:

  • re.compile(pattern, flags=0):将正则表达式编译成一个模式对象。
  • pattern.findall(string, pos=0, endpos=len(string)):在字符串中查找所有匹配的子串,并返回一个。
  • pattern.search(string, pos=0, endpos=len(string)):在字符串中搜索第一个匹配的子串,并返回一个匹配对象。
  • pattern.match(string, pos=0, endpos=len(string)):从字符串的开头开始匹配正则表达式,并返回一个匹配对象。
  • pattern.sub(repl, string, count=0:使用repl替换所有匹配正则表达式的子串,并返回替换后字符串。

re.match()函数

re.match()函数用于从字符串的开头开始匹配正则表达式,并返回一个匹配对象。如果匹配成功,则返回匹配对象;否则返回None。

re.match()函数的语法如下:

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

其中,pattern为正则表达式,string为要匹配的字符串,flags为可选参数,用于指定匹配模式。

以下是一个示例,展示了如何使用.match()函数:

import re

# 编译正则表达式
pattern = re.compile(r'hello')

# 匹配字符串
result = pattern.match('hello world')

# 如果匹配成功,打印结果
if result:
    print("匹配成功")
else:
    print("匹配失败")

在上面的示例中,我们使用正则表达式”hello”匹配字符串”hello world”,并使用match()函数进行匹配操作。由于字符串的开头就是”hello”,因此匹配成功,打印出匹配成功”。

re.search()函数

re.search()函数用于在字符串中搜索第一个匹配的子串,并返回一个匹配对象。如果匹配成功,则返回匹配对象;否则返回None。

re.search()函数的语法如下:

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

其中,pattern为正则表达式,string为要匹配的字符串,flags为可选参数,用于指匹配模式。

以下是一个示例,展示了如何使用re.search()函数:

import re

# 编译正则表达式
pattern = re.compile(r'world')

# 在字符串中搜索匹配的子串
result = pattern.search('hello world')

# 如果匹配成功,打印结果
if result:
    print("匹配成功")
else:
    print("匹配失败")

在上面的示例中,我们使用正则表达式”world”在字符串”hello world”中搜索匹配的串,并使用search()函数进行匹配操作。由于字符串中包含”world”,因此匹配成功,打印出”匹配成功”。

re.match()与re.search()的区别

re.match()函数和re.search()函数的区别在于匹配的位置不同。re.match()函数从字符串的开头匹配,而re.search()函数在字符串中搜索第一个匹配的子串。

以下是一个示例,展示了re.match()函数和re.search()函数的区别:

import re

# 编译正则表达式
pattern = re.compile(r'world')

# 使用match()函数匹配字符串
result1 = pattern.match('hello world')

# 使用search()函数匹配字符串
result2 = pattern.search('hello world')

# 如果匹配成功,打印结果
if result1:
    print("re.match()匹配成功")
else    print("re.match()匹配失败")

if result2:
    print("re.search()匹配成功")
else:
    print("re.search()匹配失败")

在上面的示例中,我们使用正则表达式”world”匹配字符串”hello world”,并分别使用match()函数和search()函数进行匹配操作。由于字符串的开头不是”world”,因此re.match()函数匹配失败,而re.search()函数在字符串中搜索到了”world”,因此匹配成功,打印出”re.search()匹配”。

示例一

假设我们有一个字符串,其中包含以下内容:

text = "Hello, my name is John. I am 25 years old."

我们想要从字符串的开头匹配”Hello”,可以使用以下代码:

import re

# 编译正则表达式
pattern = re.compile(r'Hello')

# 匹配字符串
result = pattern.match(text)

# 如果匹配成功,打印结果
if result:
    print("匹配成功")
else:
    print("匹配失败")

在上面的示例中,我们使用正则表达式”Hello”匹配字符串”Hello, my name is John. I am 25 years old.”,并使用match()函数进行匹配操作。由于字符串的开头就是”Hello”,因此匹配成功,打印出匹配成功”。

示例二

假设我们有一个字符串,其中包含以下内容:

text = "Hello, my name is John. I am 25 years old."

我们想要在字符串中搜索”John”,可以使用以下代码:

import re

# 编译正则表达式
pattern = re.compile(r'John')

# 在字符串中搜索匹配的子串
result = pattern.search(text)

# 如果匹配成功,打印结果
if result:
    print("匹配成功")
else:
    print("匹配失败")

在上面的示例中,我们使用正则表达式”John”在字符串”Hello, my name is John. I am 25 years old.”中搜索匹配的串,并使用search()函数进行匹配操作。由于字符串中包含”John”,因此匹配成功,打印出”匹配成功”。

总结

本文详细讲解了Python正则表达式之re.match()与re.search()的用法及区别,包括正则表达式语法、re模块函数和两个示例说明。在实际应用中,我们可以根据需要选择合适的函数来匹配字符串,并使用相应的正则表达式进行操作。如果匹配成功,我们可以使用group()函数获取匹配的子串。