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

时间:2019-06-30 10:46:15

标签: 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.")

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

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

2 个答案:

答案 0 :(得分:3)

PEP-572 (assignment expressions)实现了所谓的,您可以使用该运算符对表达式进行求值并将返回值一次性分配给名称,例如:

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

请注意:之前的=

(将)在python 3.8中可用。

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

答案 1 :(得分:1)

Python 3.8中的海象运算符<ng-content></ng-content>是一种选择,或者您可以执行:=语句(请注意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)