re.search()与re.findall()在Python正则表达式中的比较
正则表达式, 也被称为 有理表达式, 是用于定义搜索模式的字符序列。它主要用于与字符串的模式匹配或字符串匹配,例如查找和替换操作。正则表达式是用于匹配字符序列的通用方式。
模块正则表达式(RE)用于指定与模式匹配的字符串集合。为了理解 RE类比, 元字符在re模块的函数中使用。
有14个 元字符, 我们将按顺序讨论它们。
: It is used for dropping the special meaning of character following it
[] : It is used for representing a character class
^ : It is used for matching the beginning
$ : It is used for matching the end
. : It is used for matching any character except newline
? : It is used for matching zero or one occurrence.
| : It means OR. This is used for matching with any of the characters separated by it.
* : It is used for any number of occurrences (including 0 occurrences)
+ : It is used for one or more occurrences
{} : It is used for indicating the number of occurrences of the preceding RE to match.
() : It is used for enclosing the group of REs.
re.search()方法
re.search()方法用于返回None(如果模式不匹配),或者包含有关字符串匹配部分的所有信息的re.MatchObject对象。此方法在第一次匹配后停止运行,因此非常适合用于测试正则表达式而不是提取数据。
示例:
import re
# We will use the regular expression for matching the string of data
# in the form of Weekday's name followed by day number
regex = r"([A-Za-z]+) (\d+)"
match = re.search(regex, "Day and Date of Today is Tuesday 12")
if match != None:
print ("The String match at index % s, % s" % (match.start(), match.end()))
print ("Full match of Pattern: % s" % (match.group(0)))
print ("The Weekday of Today is: % s" % (match.group(1)))
print ("The Date of Today is: % s" % (match.group(2)))
else:
print ("The pattern of Python regex does not match with the string of Data imported.")
输出:
The String match at index 25, 35
Full match of Pattern: Tuesday 12
The Weekday of Today is: Tuesday
The Date of Today is: 12
解释:
在上面的代码中,我们导入了 re模块 并使用正则表达式来匹配数据字符串与模式的相符之处,即 今天的星期几和日期。
表达式 “([A-Za-z]+) (\d+)” 应该与导入的数据字符串相匹配。然后,它将打印 [25, 35] 因为它在索引25处匹配字符串,并以索引35处的数字结束。我们使用 group() 函数来获取所有匹配项和捕获组,以便在模式中获取所需的输出。这些组包含了匹配的值。例如:
match.group(0) 将始终返回完全匹配的数据字符串,
match.group(1) 和 match.group(2) 将按照输入字符串中的从左到右的顺序返回捕获组。而 (match.group() 也等同于 match.group(0)). 如果数据字符串与模式相匹配,它将按正确的顺序打印;否则,它将执行else语句。
re.findall() 方法
re.findall() 方法用于在数据字符串中获取所有非重叠的模式匹配项,并以字符串列表的形式返回。数据字符串将从左到右进行扫描,其匹配项将按照找到的顺序返回。
示例:
import re
# The string of text where regular expression will be searched.
string_1 = """Here are some student's ID, student A: 676
student B: 564
student C: 567
student D: 112
student E: 234"""
# Setting the regular expression for finding digits in the string.
regex_1 = "(\d+)"
match_1 = re.findall(regex_1, string_1)
print(match_1)
输出:
['676', '564', '567', '112', '234']
说明:
在上面的代码中,我们首先导入包含一些数字的文本字符串。然后我们设置了正则表达式 “(\d+)” 用于匹配字符串与该模式。匹配将是文本字符串中的非重叠数据。在导入 re.findall() 方法后,我们得到了字符串的非重叠匹配数据作为输出。
结论
在本教程中,我们讨论了Python中正则表达式中 re.search() 方法和 re.findall() 方法之间的区别,并且提供了示例。