![](/img/trans.png)
[英]Python/RegEx/findall: How do I extract a pattern from behind the match?
[英]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
存儲整個匹配項(而在您的情況下,索引1
和2
匹配(-|\.)
)。
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.