【问题标题】:Regex for numbers 1-25数字 1-25 的正则表达式
【发布时间】:2016-08-25 06:24:32
【问题描述】:

我正在从事一个音乐生成项目。输入仅包含字母字符和数字。正则表达式是我们设置的限制要求之一。

所以,这让我得到了 26 以下的数字,但如果出现像 27 这样的数字,它仍然会选择 2 和 7。如何排除所有 26 及以上的数字?谢谢!

/[0-2][0-5]|[1-9]/g 

我应该添加...这是一个大字符串的一部分,在数字前后都有字母和空格。所以我必须识别字符串中的数字并将它们拉出来。仅使用 string.prototype.match() 和正则表达式。很长的故事。谢谢

【问题讨论】:

  • 我猜你不能这样做,但使用它的数值而不是简单的文本会更容易。无论如何,请阅读此stackoverflow.com/questions/8592488/…
  • 这似乎不适用于所有选项。不幸的是需要使用正则表达式。不是我的选择。不过谢谢
  • 输入数据的结构如何?数字是否由特殊字符分隔(例如,数字之间是否至少有一个空格)?
  • @Fedreg:见my answer with explanations
  • \b(1?\d|2[0-5])\b

标签: regex


【解决方案1】:

您的[0-2][0-5]|[1-9] 正则表达式模式匹配字符串中任意位置的0-2 数字后跟0-5 数字或1-9 数字的序列。

要匹配从125个人值,您可以使用

/\b(0?[1-9]|1[0-9]|2[0-5])\b/g

regex demo

模式详情

  • \b - 引导词边界
  • (0?[1-9]|1[0-9]|2[0-5]) - 任何一种选择:
    • 0?[1-9] - 一个可选的前导 0 后跟一个从 19 的数字
    • 1[0-9] - 10 直到 19
    • 2[0-5] - 20 直到 25
  • \b - 词尾边界

【讨论】:

  • Wiktor,感谢您的解释。问题是数字前后会有空格。如果我没有说清楚并浪费您的时间,我很抱歉。只谨慎地使用了正则表达式,并没有意识到这会如此复杂。我将重新编辑我的帖子
  • 那么,您是在提取它们吗?将^$ 替换为\b。如果还有其他问题,请随时发表评论。
  • 做到了!再次抱歉,不清楚!
  • 你知道,如果你的输入是一团糟,这不是一个完美的解决方案。如果有日期或浮点值或版本号,您可能希望排除这些,这意味着,您必须使用类似 /(?:^|[^\d.])(0?[1-9]|1[0-9]|2[0-5])(?![.\d])/g 并在循环中使用 RegExp#exec 来获取捕获组内容每场比赛。这与 2. Text 中的 2 不匹配,因此可能需要进一步调整。
  • 不,这是一个音乐生成项目。只有字母字符和数字。这只是一个实验,正则表达式是我们设定的限制要求之一。如果它扩展,我们肯定会使用比正则表达式更好的方法。不过你的回答很有帮助
【解决方案2】:

啊...所以你现在有... 0-5、10-15、20-25 或 0-9

你有正确的想法,只是错误地应用了这个想法。

([01]?[0-9]|2[0-5])

// should omit those pesky one-offs you're seeing as mentioned in the comments.
^([01]?[0-9]|2[0-5])$
\b([01]?[0-9]|2[0-5])\b

// if you also want to exclude 0...
^([1-9]|1[0-9]|2[0-5])$
\b([1-9]|1[0-9]|2[0-5])\b

这形象地表示 0 到 19(带或不带前导 0)或 20-25 之间的任何数字。

【讨论】:

  • 感谢您的帮助。我明白了……谢谢你的解释。这似乎一直工作到 19,但返回 20-25 作为单独的整数( 2,0 2, 5 等)。可悲的是,我必须为此使用正则表达式。
  • ^([01]?[0-9]|2[0-5])$ 或前导/尾随 \b
  • 史蒂夫,谢谢。我编辑了我的帖子,注意到前面和后面可能有空格。抱歉最初没有包括在内。没有意识到这很重要;正则表达式的新手。
  • 所以 \b 非常适合您。我编写了复杂的正则表达式来解析日志,以在工作中的 unix/linux 主机上找到重要的故障排除方法。 \b 是一个障碍......就像一个空白。这意味着这应该是其他东西旁边的孤立发现。
  • 是的,下次我会记住那个 \b 的!谢谢
【解决方案3】:

我会建议一些类似的东西(采取或删除我添加的一些元素,因为我不知道您的确切要求)

/^(([ 01]?[1-9])|2[0-5])$/
  • ^...$ 匹配整个输入以避免匹配两位输入的单个数字
  • ? 允许输入一位数
  • | 允许“第一个数字 = 0 或 1”和“第一个数字 = 2”这两种情况

但总的来说,肯定有比正则表达式更好的工具来完成这项工作,比如解析数字并进行简单的比较。

【讨论】:

    【解决方案4】:

    ^\d$|^1\d$|^2[0-6]$ 将匹配 0-26。

    但是,这不是您应该使用正则表达式解决的问题。更好的解决方案是使用<<= 等运算符来测试数字:

    myNum < 27 // is 0-26
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 2014-01-15
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多