Python argparse regex expression

眉间皱痕 提交于 2019-12-22 03:59:42

问题


Is it possible to use a regex expression for parsing an argument? For example, I want to accept an argument if only it is a 32 length hex (i.e. matches /[a-f0-9A-F]{32}/)

I tried

p.add_argument('hex', type=str, nargs="[a-f0-9A-F]{32}")

without success


回答1:


This is what the type kwarg is used for: it can take any callable that takes a single string argument and returns the converted value.

import argparse
import re 
from uuid import uuid4

def my_regex_type(arg_value, pat=re.compile(r"^[a-f0-9A-F]{32}$")):
    if not pat.match(arg_value):
        raise argparse.ArgumentTypeError
    return arg_value

parser = argparse.ArgumentParser()
parser.add_argument('hex', type=my_regex_type)

args = parser.parse_args([uuid4().hex])


来源:https://stackoverflow.com/questions/41881002/python-argparse-regex-expression

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!