Python 如何从正则表达式搜索中提取跨度和匹配?
假设我有以下数据:Python 如何从正则表达式搜索中提取跨度和匹配?,python,regex,Python,Regex,假设我有以下数据: some_string = """ Dave Martin 615-555-7164 173 Main St., Springfield RI 559241122 davemartin101@exampledomain.com Charles Harris 800-555-5669 969 High St., Atlantis VA 340750509 charlesharris101@exampledomain.com ""
some_string = """
Dave Martin
615-555-7164
173 Main St., Springfield RI 559241122
davemartin101@exampledomain.com
Charles Harris
800-555-5669
969 High St., Atlantis VA 340750509
charlesharris101@exampledomain.com
"""
我使用以下方法来找到一种模式:
import re
pattern = re.compile(r'\d\d\d(-|\.)\d\d\d(-|\.)\d\d\d\d')
matches = pattern.finditer(some_string)
打印re
对象显示:
for match in matches:
print(match)
<re.Match object; span=(21, 33), match='615-555-7164'>
<re.Match object; span=(131, 143), match='800-555-5669'>
我得到以下结果:
print(nums)
['615-555-7164', '800-555-5669']
与上面的另一个StackOverlow线程类似,如何提取跨度
此线程被某人标记为删除,然后被删除。删除的理由是我在寻求软件方面的建议。。。但我不是 如果您只是在寻找存储匹配项的开始和结束索引的元组,只需使用
span
。请注意,span
的参数的工作方式与group
的工作方式相同,因为它们都采用匹配组索引,索引0
存储整个匹配(而在您的情况下,索引1
和2
匹配(| \.)
)
输出:
(13, 25)
(103, 115)
对于提取匹配字段,是的,您的方法非常有效。如果在同一个循环中同时提取匹配字段和范围,效果会更好
nums = []
spans = []
for match in matches:
nums.append(match.group(0))
spans.append(match.span(0))
此外,请注意,
finditer
为您提供了一个迭代器
,这意味着一旦它到达iterable的末尾,它就完成了。如果要再次迭代,则需要创建一个新文件。您在这里究竟想提取/执行什么操作?你从来没有提到过这个。你好@IamWarmducher,请问你所说的span
是什么意思?你是说span
tags?这在文档中有详细说明。请在邮寄前阅读
(13, 25)
(103, 115)
nums = []
spans = []
for match in matches:
nums.append(match.group(0))
spans.append(match.span(0))