我正在创建一个API来与工业真空设备通信。
有效的电机频率值如下所述,形式为XX.X:
01.0至60.0采取0.5赫兹或99.9赫兹的步骤
我自己找到了以下解决方案(在python中):
import re
p = re.compile('[0-5]\d.[05]|01.0|60.0|99.9')但是,我仍然可以匹配00.5,这不应该匹配。
我不想明确地排除00.5,也许我忘记了其他一些我没有检查的结束情况。
我该如何解决这个问题?
发布于 2019-05-14 13:50:08
只需添加0[1-9]\.[05]作为选项,并将另一个基限制为1-5。
p = re.compile('0[1-9]\.[05]|[1-5]\d\.[05]|60\.0|99\.9')您还需要使用\.而不是.,因为.意味着任何字符。最后,不再需要01.0条件
发布于 2019-05-14 13:59:09
\d与数字0-9匹配.如果不希望该值以00开头,则可以使用负前瞻性(?!00)
你可以使用:
^(?!00)[0-5]\d\.[05]|60\.0|99\.9$^(?!00)开始字符串并断言直接在右边的不是00[0-5]\d比赛00 - 59\.[05]|60\.0|99\.9匹配一个点和一个数字0、5、60.0或99.9$末端发布于 2019-05-14 14:11:01
由于测量设备或各种工业设备记录的数据通常是float类型,我强烈建议保留浮点类型,并避免转换为字符串。这样做的好处是避免了像'"abc55.5xyz"'这样的匹配字符串,并且只注册了有效的浮点数。它还应该比使用regex和float->str转换更快。例如,您可以使用numpy来检查正确的值。
首先,您需要创建一个正确的值数组。您只需要在代码开始时执行一次。不需要在每次迭代时都这样做。
import numpy as np
lowest_val = 1.
interm_val = 60.
stepsize = .5
highest_val = 99.9
# create the array of correct values:
correct_vals = np.empty(120)
# fill array with steps:
correct_vals[:-1] = np.linspace(lowest_val, interm_val, num=int((interm_val - lowest_val)/stepsize + 1))
correct_vals[-1] = highest_val # add highest value现在,您可以使用
motor_freq in correct_vals当电机频率在指定值内时,这将返回True,否则将返回False。如果正如您添加的那样,您的数据由格式为XX.X的unicode字符组成,则必须将其转换为浮动以进行比较,例如使用motor_freq = float('15.5')。
https://stackoverflow.com/questions/56131978
复制相似问题