我似乎无法让这个正则表达式完全正确。我需要匹配范围编号范围从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也匹配。
非常感谢任何帮助。
答案 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
后跟0
到6
|
- 或...... 0?[0-9]
- 可选0
后跟任意数字\D?
- 一个或零个非数字字符(注意您可以通过将其转换为否定的字符类[^\d]?
来进一步限制它,并在那里添加更多字符) yo\b
- 整个字yo
。