用于条件(|)匹配的python正则表达式

时间:2012-09-02 14:55:14

标签: python regex

寻找python正则表达式模式。似乎它必须存在,但它让我难过。

如果我需要找到一个地址,我搜索的字符串可以是

形式
address_is_after_123
 - or -
123_address_is_before

注意,可能有两个以上的排列,但我希望两个排列的解决方案可以扩展到更多。

我可以简单地创建多个正则表达式,但我理想地喜欢单个正则表达式。我得到的最好的是:

m = re.match("(?:address_is_after_(\d+)|(\d+)_address_is_before)",text)

这是有效的,但我必须测试m.group(1)或m.group(2)是否具有该值。有没有办法编写正则表达式,如果它匹配,我可以抓住地址而无需额外的处理?

2 个答案:

答案 0 :(得分:2)

如果lookbehind("address_is_after_")的长度不变,你可以用外观做到这一点:

>>> m = re.search(r"(?<=address_is_after_)\d+|\d+(?=_address_is_before)",text)
>>> m.group(0)
'123'

答案 1 :(得分:0)

您无需测试哪个组具有匹配项。不匹配的组会返回Noneor将其视为false:

>>> for text in ["address_is_after_123", "123_address_is_before"]:
...             m = re.match("(?:address_is_after_(\d+)|(\d+)_address_is_before)",text)
...             print(m.group(1) or m.group(2))
...
123
123