Python 正则表达式:检查匹配和捕获组

Hur*_*ent 3 python regex if-statement

我想使用 if 语句确保字符串与正则表达式匹配,并同时存储捕获组。我认为以下代码显示了我想要的内容,但它在语法上无效。有没有办法优雅地实现以下目标?

yyyyq_format = "19984"

if regex_match = re.search("^(\d{4})(\d)$", yyyyq_format):
    found_q = regex_match[2]
else:
    raise ValueError("Format \"yyyyq\" is not followed.")
Run Code Online (Sandbox Code Playgroud)

我知道以下作品(这是我唯一的选择吗?):

yyyyq_format = "19984"
regex_match = re.search("^(\d{4})(\d)$", yyyyq_format)

if regex_match:
    found_q = regex_match[2]
else:
    raise ValueError("Format \"yyyyq\" is not followed.")
Run Code Online (Sandbox Code Playgroud)

hee*_*ayl 5

PEP-572(赋值表达式)实现了所谓的海象运算符,您可以使用它来计算表达式并将返回值一次性分配给名称,例如:

if regex_match := re.search("^(\d{4})(\d)$", yyyyq_format):
    found_q = regex_match[2]
else:
    raise ValueError("Format \"yyyyq\" is not followed.")
Run Code Online (Sandbox Code Playgroud)

注意:前面的=.

这将在 Python 3.8 中提供。

在此之前,你的第二个选择是我相信的唯一方法。