使用 pyinputplus 时,正则表达式似乎在 allowRegexes 参数中不起作用
Posted
技术标签:
【中文标题】使用 pyinputplus 时,正则表达式似乎在 allowRegexes 参数中不起作用【英文标题】:regex doesn't seem to work in allowRegexes parameter when using pyinputplus 【发布时间】:2021-08-02 01:50:08 【问题描述】:我正在使用 pyinputplus,特别是 inputNum https://pyinputplus.readthedocs.io/en/latest/
这是我的代码的样子:
msg = 'Enter value to add/replace or s to skip field or q to quit: '
answer = pyip.inputNum(prompt=msg, allowRegexes=r'^[qQsS]$', blank=False)
我的目标是允许任何数字,但也允许以下 q,Q,s,S 之一。
但是,当我运行代码并输入“sam”时,代码会崩溃,因为稍后我会尝试转换为 float(answer)。
我的期望是 allowRegexes 不会允许这样做,并会再次向我显示重新输入的提示。 请指教!
【问题讨论】:
【参考方案1】:如果您提供 allowRegexes
参数,pyip.inputNum
似乎会停止验证输入。请参阅allowRegexes
doesn't seem work properly Github 问题。
您可以将inputCustom
方法与自定义验证方法一起使用:
import pyinputplus as pyip
import ast
def is_numeric(x):
try:
number = ast.literal_eval(x)
except:
return False
return isinstance(number, float) or isinstance(number, int)
def raiseIfInvalid(text):
if not is_numeric(text) and not text.casefold() in ['s', 'q']:
raise Exception('Input must be numeric or "q"/"s".')
msg = 'Enter value to add/replace or s to skip field or q to quit: '
answer = pyip.inputCustom(raiseIfInvalid, prompt=msg)
所以,如果text
不等于int
或float
且不等于s
/S
/q
/Q
,则提示将重复出现。
【讨论】:
感谢@Wiktor Stribizew。你知道如何检查自定义异常并允许浮动吗?我相信 isumeric 不允许小数点 @trustory 这样的资源很多,见Check if a number is int or float。 This answer 可能会有所帮助。或者,查看this thread。 Stribizew 这也行吗?如果不是 string.replace(",","").isnumeric() @trustory 我添加了完整的代码 sn-p。现在对你有用吗?以上是关于使用 pyinputplus 时,正则表达式似乎在 allowRegexes 参数中不起作用的主要内容,如果未能解决你的问题,请参考以下文章