简介
re 模块是我们在 python 中用于正则表达式的模块。文本搜索和更复杂的文本操作都使用正则表达式。grep 和 sed 等工具、vi 和 emacs 等文本编辑器以及 tcl、perl 和 python 等计算机语言都具有内置的正则表达式支持。
python 中的 re 模块提供用于匹配正则表达式的函数。
定义我们要查找或修改的文本的正则表达式称为模式。文本文字和元字符组成了这个字符串。编译函数用于创建模式。建议使用原始字符串,因为正则表达式经常包含特殊字符。(r 字符用于指示原始字符串。)字符在组装成模式之前不会以这种方式解释。
其中一个函数可用于在模式组合后将模式应用于文本字符串。可用的函数包括 match、search、find 和 finditer。
使用的语法
此处使用的正则表达式函数是:我们使用正则表达式函数查找匹配项。
- re.match():确定 re 是否在字符串开头匹配。如果字符串开头的零个或多个字符与正则表达式模式匹配,则 match 方法返回匹配对象。
- p.finditer():查找 re 匹配的所有子字符串并将它们作为迭代器返回。迭代器在字符串中为模式的所有非重叠匹配项提供匹配对象是 finditer 方法的结果。
- re.compile():将正则表达式模式编译为正则表达式对象,可以使用其 match()、search() 和下面描述的其他方法进行匹配。可以通过指定标志的值来修改表达式的行为。值可以是使用按位或(| 运算符)组合的以下任何变量。
- m.start():m.start() 返回匹配开始时字符串中的偏移量。
- m.group():当 mo.groups() 返回一组值时,您可以使用多重赋值方法将每个值分配给不同的变量,如下面的 areacode, mainnumber = mo.groups() 行中所示。
- search:它与 re.match() 类似,但不要求我们只在文本开头查找匹配项。search() 函数可以在字符串中的任何位置定位模式,但它只返回模式的第一个实例。
算法
使用 import re 导入 regex 模块。
使用 re.compile() 函数创建 regex 对象。(记得使用原始字符串。)
将要搜索的字符串传递给 regex 对象的 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 导入 regex 模块。使用 re.compile() 函数创建一个 regex 对象("[a-z0-9]")并将其分配给变量 p。对 m 运行循环并将要搜索的字符串传递到 regex 对象的 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() 函数创建一个 regex 对象 (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 对象实例。利用 start()、end() 和 span() 方法使用此 match 对象检索有关匹配字符串的详细信息。
当有许多匹配项时,如果使用 findall() 加载所有匹配项,则存在 ram 过载的危险。您可以以迭代器对象的形式获取所有潜在匹配项,而不是使用 finditer() 方法,这将提高效率。
这意味着 finditer() 提供了一个可调用对象,当调用该对象时,它会将结果加载到内存中。
到此这篇关于在python的正则表达式中找到每个匹配的确切位置的文章就介绍到这了,更多相关python找到匹配的确切位置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论