找到使用正则表达式找到哪些组

时间:2016-02-09 08:26:59

标签: python regex python-3.x

我正在尝试匹配以下字符串

foo=boo-40
foo=1*boo+0
foos=1/10*boo+0
foos=1*boo-32000
foos=boo*1
foos=boo*1/10

usingregex。

为此,我正在使用以下正则表达式:

'[(foo|foos)]=(?P<Pnum1>\d+)?(/?P<Pdenom1>\d+)?\*?\(?boo\)?\*?(?P<Pnum2>\d+)?(/?P<Pdenom2>\d+)?(?P<Poffset>[+-]\d+)?'

我的问题是假设没有找到Pnum1,而是找到了Pnum2。

如何检测找到哪个Pnum1或Pnum2?

我尝试了以下内容:

try:
    if match.group('Pnum1'):
        Pnum = match.group('Pnum1')
    elif match.group('Pnum2'):
        Pnum = match.group('Pnum2')
    else:
        Pnum = None
except IndexError:
        Pnum = None

但是这个测试是错误的,因为如果'Pnum1'不存在,代码不会测试'Pnum2'(它可能不存在)。

是否可以检索找到的匹配元素?或者从match.group('Pnum2')返回默认值(比如字典中的get)?

1 个答案:

答案 0 :(得分:1)

假设正则表达式是正确的,那么如果您只是执行以下操作,而不是测试,则会更好:

Pnum = match.group('Pnum1') or match.group('Pnum2')

or返回第一个 truthy 值或最后一个 falsy 时,如果'Pnum1'不是None,则变量将从'Pnum1'获取值。如果是None,则来自'Pnum2'的值。如果两者都是None,则会变为None

请注意,这会优先考虑您在or表达式中首先放置的术语。