首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegEx用于匹配"01.0到60.0,步骤为0.5,还是99.9"?

RegEx用于匹配"01.0到60.0,步骤为0.5,还是99.9"?
EN

Stack Overflow用户
提问于 2019-05-14 13:44:54
回答 4查看 204关注 0票数 0

我正在创建一个API来与工业真空设备通信。

有效的电机频率值如下所述,形式为XX.X:

01.0至60.0采取0.5赫兹或99.9赫兹的步骤

我自己找到了以下解决方案(在python中):

代码语言:javascript
复制
import re
p = re.compile('[0-5]\d.[05]|01.0|60.0|99.9')

但是,我仍然可以匹配00.5,这不应该匹配。

我不想明确地排除00.5,也许我忘记了其他一些我没有检查的结束情况。

我该如何解决这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-05-14 13:50:08

只需添加0[1-9]\.[05]作为选项,并将另一个基限制为1-5。

代码语言:javascript
复制
p = re.compile('0[1-9]\.[05]|[1-5]\d\.[05]|60\.0|99\.9')

您还需要使用\.而不是.,因为.意味着任何字符。最后,不再需要01.0条件

票数 1
EN

Stack Overflow用户

发布于 2019-05-14 13:59:09

\d与数字0-9匹配.如果不希望该值以00开头,则可以使用负前瞻性(?!00)

你可以使用:

代码语言:javascript
复制
^(?!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
  • 字符串的$末端

Regex演示

票数 0
EN

Stack Overflow用户

发布于 2019-05-14 14:11:01

由于测量设备或各种工业设备记录的数据通常是float类型,我强烈建议保留浮点类型,并避免转换为字符串。这样做的好处是避免了像'"abc55.5xyz"'这样的匹配字符串,并且只注册了有效的浮点数。它还应该比使用regex和float->str转换更快。例如,您可以使用numpy来检查正确的值。

首先,您需要创建一个正确的值数组。您只需要在代码开始时执行一次。不需要在每次迭代时都这样做。

代码语言:javascript
复制
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

现在,您可以使用

代码语言:javascript
复制
motor_freq in correct_vals

当电机频率在指定值内时,这将返回True,否则将返回False。如果正如您添加的那样,您的数据由格式为XX.X的unicode字符组成,则必须将其转换为浮动以进行比较,例如使用motor_freq = float('15.5')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56131978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档