📜  Python| re.search() 与 re.match()(1)

📅  最后修改于: 2023-12-03 15:04:22.453000             🧑  作者: Mango

Python| re.search()与re.match()

正则表达式是一种强大的文本处理工具,能够通过对文本中的模式进行匹配、查找、替换等操作,快速地实现各种字符串处理需求。Python中的re模块提供了实现正则表达式操作的功能函数,其中re.search()和re.match()函数是两个常用的工具。

re.search()函数

re.search()函数在给定的字符串中查找匹配指定正则表达式模式的第一个位置,并返回一个包含匹配情况信息的MatchObject对象。如果字符串中没有匹配的模式,则返回None。

基本使用
import re

# 在给定的字符串中查找数字
text = "The quick brown fox 999 jumps over the lazy dog"
match = re.search(r'\d+', text)
if match:
    print("首次找到的数字是:", match.group())
else:
    print("字符串中没有数字")

输出:

首次找到的数字是: 999
函数参数

re.search()函数有两个参数:

  • pattern:要匹配的正则表达式模式,可以是字符串或者编译后的正则表达式对象。
  • string:要进行匹配的字符串。

除此之外,还可以使用一些可选参数来控制匹配行为:

  • flags:可以使用各种标志控制匹配行为,比如忽略大小写、多行模式等。具体的标志值可以参考Python官方文档中的说明。
  • pos:指定字符串中开始搜索的位置,默认为0。
  • endpos:指定字符串中结束搜索的位置,默认为字符串的长度。
import re

# 指定多个可选参数进行匹配
text = "The quick brown fox 999 jumps over the lazy dog"
match = re.search(r'\d+', text, flags=re.IGNORECASE, pos=10, endpos=20)
if match:
    print("首次找到的数字是:", match.group())
else:
    print("字符串中没有数字")
使用正则表达式模式中的子组匹配

re.search()函数可以使用正则表达式模式中的子组进行匹配,以获取更详细的匹配情况信息。

import re

# 使用正则表达式模式中的子组进行匹配
text = "The quick brown fox 999 jumps over the lazy dog"
match = re.search(r'(\d+)', text)
if match:
    print("首次找到的数字是:", match.group(1))
    print("数字出现的位置:", match.start(1), "-", match.end(1))
else:
    print("字符串中没有数字")

输出:

首次找到的数字是: 999
数字出现的位置: 16 - 19
re.match()函数

re.match()函数从给定的字符串开头开始,尝试匹配指定的正则表达式模式,返回一个包含匹配情况信息的MatchObject对象。如果字符串开头没有与模式相匹配的文本,则返回None。

基本使用
import re

# 从给定字符串开头开始匹配单词
text = "The quick brown fox 999 jumps over the lazy dog"
match = re.match(r'\w+', text)
if match:
    print("首次找到的单词是:", match.group())
else:
    print("字符串开头没有单词")

输出:

首次找到的单词是: The

可以看出,re.match()只匹配了从字符串开头开始的单词,忽略了字符串开头的空格和数字。

函数参数

re.match()函数的参数与re.search()函数相同,不再赘述。

注意事项

需要注意的是,如果想在字符串中任意位置匹配正则表达式,应该使用re.search()函数而不是re.match()函数。

另外,因为re.match()函数只匹配从字符串开头开始的文本,所以如果正则表达式模式需要在字符串中的任意位置进行匹配,则应该在模式开头添加“.?”或者“\S?”等通配符。

import re

# 使用.*?匹配从字符串开头开始的单词
text = "The quick brown fox 999 jumps over the lazy dog"
match = re.match(r'.*?(\w+)', text)
if match:
    print("首次找到的单词是:", match.group(1))
else:
    print("字符串开头没有单词")

输出:

首次找到的单词是: The
总结

re.search()和re.match()是两个常用的正则表达式匹配函数,前者可以在字符串中任意位置匹配,后者只能匹配字符串开头的文本。使用时需要注意正则表达式模式的编写与参数的设置,以达到更准确的匹配效果。