re.search()与re.findall()在Python正则表达式中的比较

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() 方法之间的区别,并且提供了示例。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程