0

寻找 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) 是否具有该值。有没有办法编写正则表达式,以便如果匹配,我可以在不进行额外处理的情况下获取地址?

4

2 回答 2

3

您可以使用环视来做到这一点,前提是环视 ( "address_is_after_") 的长度是恒定的:

>>> m = re.search(r"(?<=address_is_after_)\d+|\d+(?=_address_is_before)",text)
>>> m.group(0)
'123'
于 2012-09-02T15:07:54.277 回答
0

您无需测试哪个组匹配。一个不匹配的组返回None,它被视为假or

>>> 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
于 2012-09-03T01:07:25.503 回答