Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从正则表达式搜索中提取跨度和匹配?_Python_Regex - Fatal编程技术网

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