繁体   English   中英

如何从正则表达式搜索中提取跨度和匹配?

[英]How do I extract the span and match from a regex search?

假设我有以下数据:

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 object 显示:

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'>

我想提取跨度和匹配字段。 我发现这个链接提取部分正则表达式匹配,显示如何使用group()

nums = []
for match in matches:
    nums.append(match.group(0))

我得到以下结果:

print(nums)
['615-555-7164', '800-555-5669']

与上面的其他 StackOverlow 线程类似,如何提取跨度?

此线程已被某人标记为删除,然后被删除。 删除的理由是我正在寻求有关软件的建议……我不是。 https://i.imgur.com/sbCfekf.png

如果您只是在寻找存储匹配的开始和结束索引的元组,只需使用span 请注意, span参数的工作方式与group相同,因为它们都采用匹配组索引,并且索引0存储整个匹配项(而在您的情况下,索引12匹配(-|\.) )。

for match in matches:
    print(match.span(0))

Output:

(13, 25)
(103, 115)

对于提取匹配字段,是的,您的方法工作得很好。 如果您在同一个循环中提取匹配字段和跨度会更好。

nums = []
spans = []
for match in matches:
    nums.append(match.group(0))
    spans.append(match.span(0))

此外,请注意finditer给你一个Iterator ,这意味着一旦它到达可迭代的末尾,它就完成了。 如果您想再次迭代它,您将需要创建一个新的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM