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

2024-09-24 22:31:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望确保字符串与使用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.")

我知道以下工作(这是我唯一的选择?)地址:

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.")

Tags: reformatsearchifismatchnotelse
2条回答

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

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

注意:前面的=。你知道吗

这将在python3.8中提供。你知道吗

在那之前,你的第二个选择是我唯一相信的。你知道吗

python3.8中的Walrus操作符:=是一个选项,或者您可以执行for else语句(注意re.finditer):

import re

yyyyq_format = "19984"

for g in re.finditer("^(\d{4})(\d)$", yyyyq_format):
    found_q = g[2]
    break
else:
    raise ValueError("Format \"yyyyq\" is not followed.")

print(found_q)

印刷品:

4

相关问题 更多 >