如何在python ArgumentParser.add_argument()中包含正则表达式选项?
如何在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 _
选项中包含正则表达式
例如,假设我希望创建自己的自定义装载程序:
# 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自动检查。