簡體   English   中英

Python Regex-如何獲取匹配項的位置和值

[英]Python Regex - How to Get Positions and Values of Matches

如何使用re模塊獲取所有比賽的開始和結束位置? 例如,給定模式r'[az]'和字符串'a1b2c3d4'我想獲取找到每個字母的位置。 理想情況下,我也想找回比賽的文字。

import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
    print(m.start(), m.group())

取自

正則表達式操作方法

span()在單個元組中返回起始索引和結束索引。 由於match方法僅檢查RE是否在字符串開頭匹配,因此start()始終為零。 但是,RegexObject實例的搜索方法將掃描字符串,因此在這種情況下,匹配可能不會從零開始。

>>> p = re.compile('[a-z]+')
>>> print p.match('::: message')
None
>>> m = p.search('::: message') ; print m
<re.MatchObject instance at 80c9650>
>>> m.group()
'message'
>>> m.span()
(4, 11)

結合使用:

在Python 2.2中,finditer()方法也可用,它返回一個MatchObject實例序列作為迭代器。

>>> p = re.compile( ... )
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
>>> iterator
<callable-iterator object at 0x401833ac>
>>> for match in iterator:
...     print match.span()
...
(0, 2)
(22, 24)
(29, 31)

您應該能夠按以下順序進行操作

for match in re.finditer(r'[a-z]', 'a1b2c3d4'):
   print match.span()

對於Python 3.x

from re import finditer
for match in finditer("pattern", "string"):
    print(match.span(), match.group())

對於字符串中的每個匹配,您將獲得\\n分隔的元組(分別包含匹配的第一個和最后一個索引)和匹配本身。

請注意,跨度和組在正則表達式中被索引為多個捕獲組

regex_with_3_groups=r"([a-z])([0-9]+)([A-Z])"
for match in re.finditer(regex_with_3_groups, string):
    for idx in range(0, 4):
        print(match.span(idx), match.group(idx))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM