寻找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)是否具有该值。有没有办法编写正则表达式,如果它匹配,我可以抓住地址而无需额外的处理?
答案 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)
您无需测试哪个组具有匹配项。不匹配的组会返回None
,or
将其视为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