簡體   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