如何在python ArgumentParser.add_argument()中包含正则表达式选项?

如何在python ArgumentParser.add_argument()中包含正则表达式选项?,python,regex,command-line-arguments,Python,Regex,Command Line Arguments,如何在Python的ArgumentParser.add_argument()方法的选项中包含正则表达式 例如,假设我希望创建自己的自定义装载程序: # file: my_mount.py from argparse import ArgumentParser # some simple choices to help illustrate option_choices = {'ro|rw', 'user=.*', 'do=[a-z]{1,10}', 'allow_other'} if _

如何在Python的ArgumentParser.add_argument()方法的
选项中包含正则表达式

例如,假设我希望创建自己的自定义装载程序:

# file: my_mount.py
from argparse import ArgumentParser

# some simple choices to help illustrate 
option_choices = {'ro|rw', 'user=.*', 'do=[a-z]{1,10}', 'allow_other'}

if __name__ == '__main__':
    parser = ArgumentParser()
    parser.add_argument('-s', '--share', dest='share')
    parser.add_argument('-m', '--mount-point', dest='mnt_pt')
    parser.add_argument('-o', dest='options', action='append', 
                        choices=option_choices, 
                        help='Options for mounting - see choices '
                             'expressions set for valid options')

    args, _ = parser.parse_known_args()
    # do some fancy stuff to do with mounting filesystems...

我的想法是可以基于一组简单的正则表达式筛选出有效的选项,特别是在所有可能的情况下手工编码都是一件烦琐的事情,例如,
{'do=nothing'、'do=something'、'do=anyhing'…}
,但在调用
python my_mount.py-h
时,还可以方便地保留选项列表。我最初的想法是有一个自定义的
操作
,但这似乎与在
add_argument()

中指定
选项
时不兼容。我考虑了一个类似的问题,并决定改用它进行验证

这允许您使用可调用的来执行验证。因此,不要使用选项,而是使用type来指定一个可调用项,使您的正则表达式在其中匹配


如果您想在某个容器中保留选项,那么您也可以这样做。或者,如果必须仅使用选项,您可以定义一个自定义容器来验证输入。

您不能。您需要在任何字符串中接受,然后执行
断言any(对于选项中的expr,re.match(expr,opt)不是None\u opt in args.options的选项)
或类似操作。只需将
'accepts:{}.format(option_choices)
添加到
--options
的帮助参数中。您不需要依赖ArgParses自动检查。