Python argparse 正则表达式

32

是否可以使用正则表达式来解析参数?例如,如果只有32个十六进制字符(即匹配/[a-f0-9A-F]{32}/),我想要接受一个参数。

我尝试过:

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

未能成功


1
或者,看一下这个问题:https://dev59.com/0WUq5IYBdhLWcg3wPuBQ。 - fenceop
1
argparse确实使用regex表达式来计算参数字符串,但它会自动生成模式。允许的nargs值,如*+?',具有正则表达式的感觉,但它们并不直接使用。它们实际上是模块常量的值(例如argparse.ZERO_OR_MORE),并在if else测试中使用。 - hpaulj
1个回答

62

type这个关键字参数可以接受任何接受一个字符串参数并返回转换后值的可调用对象。如果可调用对象引发argparse.ArgumentTypeErrorTypeErrorValueError异常,则会捕获异常并显示一个格式良好的错误消息。

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("invalid value")
    return arg_value

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接