Python有正则表达式的最大组引用吗(像Perl一样)?

ee7vknir  于 2022-11-21  发布在  Python
关注(0)|答案(2)|浏览(148)

内容:

在Perl中运行正则表达式匹配时,$1$2可用作从匹配中捕获的正则表达式引用的引用,类似地,在Python中,\g<0>\g<1>可用作
Perl还有一个$+特殊引用,它引用具有最高数值的捕获组

我的问题:
Python是否有$+的等价物?

我尝试了\g<+>,并尝试在文档中查找,其中只说:
\g<name>将使用与名为name的组匹配的子字符串,而\g<number>使用相应的组号。因此,\g<2>等效于\2。但在替换字符串(如\g<2>0)中不会有歧义。(\20将被解释为对组20的引用,而不是对组2后跟文字字符'0'的引用。)以下替换都是等效的,但使用替换字符串的所有三种变体。

olqngx59

olqngx591#

  • 分支reset group* 可能适合预期用途,在注解中有解释。
>>> import regex
>>> m = regex.search(r'(?|(a)|(b))', 'zba')
>>> m.group(1)
'b'

简而言之,使用分支reset (?|(pA)|(pB)|(pC)),整个模式是 * 一个 * 捕获组(有三个交替),而不是三个。因此,您始终知道哪个是“最后”捕获,因为只有一个捕获。这也可以用于命名的捕获组。
随着(?|...)中的模式变得越来越复杂,这个特性增加了更多的功能和用途。请在您喜欢的regex文档中找到它。例如,这里是in regular-expressions.info,这里是一些Perl资源,perlre和The Effective Perler

eiee3dmh

eiee3dmh2#

在大多数情况下,您只需在交替期间使用一次捕获。

(foo|bar|baz)

在更复杂的情况下,您可以过滤掉None结果。

import re
s = 'bar4'
m = re.search( r'foo([12])|bar([34])|baz([56])', s )
[ g for g in m.groups() if g is not None ]   # ['4']

相关问题