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