正则表达式 - 范围(00-16)?

时间:2016-01-18 22:27:56

标签: regex

我似乎无法让这个正则表达式完全正确。我需要匹配范围编号范围从00yo到16yo但不包括任何超过16的匹配。

我目前正在使用的正则表达式为:\b[0-1]?[0-9][\s\S]?yo\b但它不会排除16之前的匹配项,并且会匹配50yo

请注意,我在原始硬盘驱动器上搜索数据,只能在流中访问数据。我不能在开始时使用^$(唯一的选择是使用'not'语句来勾选正则表达式)。我使用\b来限制误报匹配的数量。有超过1tb的数据,所以我试图将误报保持在最低限度,并将搜索速度保持在最大值。

从0到16的VALID匹配示例为:

0 yo
0yo
0-yo
0_yo

00 yo
00yo
00-yo
00_yo

7 yo
7yo
7-yo
7_yo

07 yo
07yo
07-yo
07_yo

14 yo
14yo
14-yo
14_yo

NO匹配的例子是16以上的任何东西,例如:

20 yo
20yo
20-yo
20_yo

我希望将加入字符(即 - 或_)保留为任何空格或非空格字符,以便14> yo也匹配。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要排除数字与yo之间匹配的数字(现在,[\S\s]与之匹配)。

我建议:

\b(?:1[0-6]|0?[0-9])\D?yo\b

请参阅regex demo

解释

  • \b - 字边界
  • (?:1[0-6]|0?[0-9]) - 2个替代方案:
    • 1[0-6] - 1后跟06
    • 的数字
    • | - 或......
    • 0?[0-9] - 可选0后跟任意数字
  • \D? - 一个或零个非数字字符(注意您可以通过将其转换为否定的字符类[^\d]?来进一步限制它,并在那里添加更多字符)
  • yo\b - 整个字yo