繁体   English   中英

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

[英]Python Regex: Check for match and capture groups

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

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

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

注意: before =

这(将)在 Python 3.8 中可用。

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

海象运算符:=在 Python 3.8 中是一种选择,或者您可以执行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM