Python Regex - 如何获取匹配的位置和值
Posted
技术标签:
【中文标题】Python Regex - 如何获取匹配的位置和值【英文标题】:Python Regex - How to Get Positions and Values of Matches 【发布时间】:2010-09-19 23:59:50 【问题描述】:如何使用re
模块获取所有匹配项的开始和结束位置?例如,给定模式r'[a-z]'
和字符串'a1b2c3d4'
,我想获取它找到每个字母的位置。理想情况下,我也想取回比赛的文本。
【问题讨论】:
看看这是否有帮助Match Objects 【参考方案1】:import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
print(m.start(), m.group())
【讨论】:
这不提供匹配中其他组的索引 regex=r'([az])(0-9)' m.start 将用于 group(),而不是 group(1)跨度> @StevenWernerCSstart()
可以接受组号,所以如果你想要第 n 组的索引,请使用 start(n)
@hi-angel 是的,看看我去年的回答就是这样做的【参考方案2】:
取自
Regular Expression HOWTO
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()
【讨论】:
你可以像re.search(r'abbit', "has abbit of carrot").span(0)
一样使用它——(4, 9)
span()
返回的“结束索引”类似于 Python 切片表示法中的“停止”,因为它上升到但不包括该索引;见here。【参考方案3】:
对于 Python 3.x
from re import finditer
for match in finditer("pattern", "string"):
print(match.span(), match.group())
对于字符串中的每个命中,您将获得\n
分隔元组(分别包含匹配的第一个和最后一个索引)和匹配本身。
【讨论】:
【参考方案4】:请注意,跨度和组是为正则表达式中的多个捕获组编制索引
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))
【讨论】:
谢谢,这已被证明非常有用,而且似乎被埋没了。此外,如果有人需要这个:使用命名捕获组时,可以使用4
来自哪里?
@RadioControlled number_of_known_groups_in_the_regex + 1,因为范围是 [start,end) 不包括 end
@StevenWernerCS 所以它不能推广到组数未知的情况......以上是关于Python Regex - 如何获取匹配的位置和值的主要内容,如果未能解决你的问题,请参考以下文章
无法在单行 oracle 中获取所有匹配的 regex_substr
JavaScript之正则匹配索引RegExpmatchAllreduceconcattoStringsplitincludesString/d