正则表达式匹配少于两位数的数字

时间:2018-11-15 08:00:45

标签: regex

我在文件中有这样的记录:

A 20 year old programmer
A 52 year old politician
A 12 year old practitioner
Many many more of these...

我只想匹配数字少于20的行。我尝试过:

^[0-20]{2}$

但是它仅适用于数字0-2。如何构造正则表达式以匹配数字< 20?例如,它应该匹配:

A 12 year old practitioner

但不是

A 20 year old programmer
A 52 year old politician

2 个答案:

答案 0 :(得分:3)

您可以使用

\b1?[0-9]\b

请参见regex demo

详细信息

  • \b-单词边界
  • (?:1?[0-9])-可选的1及其后的任何数字
  • \b-单词边界

单词边界变化

要匹配字符串中的任何位置(即使粘在单词上):

(?<!\d)1?[0-9](?!\d)

仅在空白之间匹配:

(?<!\S)1?[0-9](?!\S)

答案 1 :(得分:1)

使用正则表达式来匹配数字范围通常有点笨拙,但是在这里,您可以使用以下命令很简单地做到这一点:

\b1?\d\b

https://regex101.com/r/YCWmNo/2

以简单的语言表示:可选的一种,后跟一个数字。因此,允许使用任何独立的数字,但是两位数字需要其第一位为1。

如果要允许前导零,请更改为\b[01]?\d\b