Python 如何在正则表达式中找到每个匹配的确切位置

Python 如何在正则表达式中找到每个匹配的确切位置

引言

在Python中,re模块用于正则表达式。文本搜索和更复杂的文本操作都使用正则表达式。像grep和sed这样的工具,像vi和emacs这样的文本编辑器,以及像Tcl、Perl和Python这样的计算机语言都内置了正则表达式支持。

Python中的re模块提供了用于匹配正则表达式的函数。

定义我们要查找或修改的文本的正则表达式称为模式。这个字符串由文本字面量和元字符组成。使用compile函数创建模式。建议使用原始字符串,因为正则表达式通常包含特殊字符。(使用r字符表示原始字符串。)直到将它们组合成模式之前,这些字符不会以这种方式解释。

模式组装完成后,可以使用其中一个函数将模式应用于文本字符串。可用的函数包括:匹配(match)、搜索(search)、查找(find)和查找迭代器(finditer)。

使用的语法

这里使用的正则表达式函数是:使用正则表达式函数查找匹配项。

RE .match():确定RE是否匹配字符串的开头。如果字符串开头的零个或多个字符与正则表达式模式匹配,match方法返回一个match对象。

p.d iditer():查找与RE匹配的所有子字符串,并将它们作为迭代器返回。finditer方法的结果是一个迭代器,它可以跨越字符串中模式的所有非重叠匹配项传递match对象。

re.compile():将正则表达式模式编译为正则表达式对象,可以使用其match()、search()和下面描述的其他方法进行匹配。可以通过指定标志的值来修改表达式的行为。这些值可以是下列变量中的任意一个,使用按位或(|操作符)组合。

m.start(): m.start()返回字符串中匹配项开始处的偏移量。

m.g ogroup():当mo.groups()返回一个值的元组时,你可以使用多重赋值方法将每个值分配给不同的变量,就像下面的areaCode, mainNumber = mo.groups()行那样。

search:它可以与re.match()媲美,但不要求我们只在文本开头查找匹配项。

步骤

  • 使用import re导入正则表达式模块。

  • 使用re.compile()函数创建一个正则表达式对象。(记得使用原始字符串。)

  • 将要查找的字符串传递给正则表达式对象的finditer()方法。这将返回一个Match对象。

  • 调用Match对象的group()方法返回实际匹配的文本字符串。

  • 我们也可以使用span()方法在一个元组中同时获取开始和结束索引。

示例

 #importing re functions
import re
#compiling [A-Z0-9] and storing it in a variable p
p = re.compile("[A-Z0-9]")
#looping m times in p.finditer
for m in p.finditer('A5B6C7D8'):
#printing the m.start and m.group
   print m.start(), m.group()

输出

这将给出输出 –

0 A
1 5
2 B
3 6
4 C
5 7
6 D
7 8

代码解释

使用import re导入正则表达式模块。使用re.compile()函数创建一个正则表达式对象(“[A-Z0-9]”),并将其赋值给变量p。运行一个循环,并将要搜索的字符串传递给正则表达式对象的finditer()方法。这将返回一个Match对象。调用Match对象的m.group()和m.start()方法,返回实际匹配文本的字符串。

示例

# Python program to illustrate
# Matching regex objects
# with groups
import re
phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
mo = phoneNumRegex.search('My number is 415-555-4242.')
print(mo.groups())

输出结果

这将给出输出结果−

('415', '555-4242')

代码解释

使用import re导入regex模块。使用re.compile()函数创建一个正则表达式对象(r'(\d\d\d)-(\d\d\d-\d\d\d\d)’)并将其赋值给变量phoneNumRegex。将要搜索的字符串传递给Regex对象的search()方法,并将其存储在变量mo中。这将返回一个Match对象。调用Match对象的mo.groups()方法返回实际匹配文本的字符串。

结论

Python re模块提供的search()、match()和finditer()方法允许我们匹配正则表达式模式,并在匹配成功时提供Match对象实例。可以使用Match对象的start()、end()和span()方法来获取有关匹配字符串的详细信息。

当存在多个匹配时,如果使用findall()将它们全部加载到内存中,可能会导致RAM过载。可以通过使用finditer()方法获取以迭代器对象形式呈现的所有潜在匹配项,这样可以提高效率。

这意味着finditer()提供了一个可调用对象,当调用它时,将把结果加载到内存中。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程