我想检查一个字符串是否包含与正则表达式_\d{2}.
匹配的子字符串(即_
,两个数字然后是.
),如果匹配,则返回数字部分。以下代码可以做到这一点:
def extract_digits(string: str) -> int:
match = re.search(r'_\d{2}\.', string)
if match is not None:
digits = match.group(0)[1:3]
n = int(digits)
else:
n = None
return n
可以通过在以下字符串上对其进行测试来对其进行验证:
wrong = "resnet50_coco_best_v2.1.0.h5"
right = "resnet50_csv_24.h5"
但是,我想知道对输出使用类型提示是否有意义,因为它可以是NoneType
或int
。请注意,下游代码会优雅地处理None
返回值,因此我的疑问不是该函数是否会使我的代码崩溃。我唯一的困惑是,lint或解释器似乎都根本不在乎return参数的类型可能为int
。
我认为这与类型提示(它们是针对开发人员的提示,而不是针对解释程序的指令)的思想是一致的。但是然后,我在使用类型提示然后忽略它们时是Pythonic吗?
答案 0 :(得分:1)
如果要对该功能使用提示,则应使用typing.Optional
:
from typing import Optional
def extract_digits(string: str) -> Optional[int]:
match = re.search(r'_\d{2}\.', string)
if match is not None:
digits = match.group(0)[1:3]
n = int(digits)
else:
n = None
return n