正则表达式捕获文本中的双位或单位数

时间:2017-10-09 07:37:28

标签: regex

我正在尝试编写一个reg-ex,它将捕获一个可以是1或2位的数字,并且会出现在文本的中间,例如..." jdjkj23kljl"或者" kjflk2jklj"。
到目前为止,我所尝试过的所有内容仅捕获2位数字情景或1位数字,但不能同时捕获两者。

谢谢!

3 个答案:

答案 0 :(得分:1)

如果您的正则表达式支持,请尝试(\d{1,2}) 否则,获得更广泛的支持,请尝试([0-9][0-9]|[0-9])

说明:

  • \d表示"任何数字"并且比[0-9]更强大(见axiac的评论)
  • {1,2}表示"一两次
  • [0-9]表示零至九
  • [0-9][0-9]是"两位数",左手和膝盖的爬行版本 非常有限的味道
  • ...|...有一个技巧:它需要较长的版本才能同时适用于

答案 1 :(得分:1)

(<?=[^0-9])([0-9]{1,2})(?=[^0-9])

将每个数字与1或2位数字匹配,而不是其他数字。

<强>测试

echo -ne "aaa1bb22cc333ddd4444zzz" | egrep -oP "(<?=[^0-9])([0-9]{1,2})(?=[^0-9])"

<强>输出

  

1

     

22

修改

正如Yunnosch所说,第一个解决方案没有考虑到文本开头和结尾的数字。这是另一个解决方案:

echo -ne "0aaa1bb22cc333ddd4444zzz9" | egrep -oP "(<?=[^0-9]|^)([0-9]{1,2})(?=[^0-9]|$)"
  

0

     

1

     

22

     

9

答案 2 :(得分:0)

它支持在行/字符串的开头/结尾匹配

(?<=[A-z])\d{1,2}(?=[A-z])

输入

  

jdjkj23kljl“或”kjflk2jk1234lj2 12sdfsdf12 hujng 12 hung

输出

  

jdjkj 23 kljl“或”kjflk 2 jk1234lj2 12sdfsdf12 hujng 12 hung