在正则表达式中使字符范围不贪婪

时间:2014-08-06 11:28:29

标签: regex non-greedy

我有一个消息列表,我在该消息中搜索4位或3位数字,然后我将其替换为该号码。

所以我现在的正则表达式是

查找

(.*)([0-9]{3,4})(.*)\r

替换

\2

然而,问题是[0-9] {3,4}如果有4位数,则只占用前3位数,所以即使有4位数字序列,它也只会获取3位数字。这就是我不想要的。

有没有办法让它抓住一个4位数字,如果可以的话,如果它找不到该行中的4位数字,只能抓取3位数字。

由于

2 个答案:

答案 0 :(得分:1)

正则表达式使用*?运算符支持非贪婪:

(.*?)([0-9]{3,4})(.*)\r

根据您用来匹配正则表达式的程序,您需要添加其他标志。

在这种情况下,正则表达式更乐意为第二组提供数字而不是第一组。默认情况下,正则表达式从左到右是贪婪的:它们会尝试将所有内容存储在第一组中,并且只在必要时才移动到下一个(仍然匹配字符串)。

答案 1 :(得分:0)

试试这个:

(([0-9]{4})|([0-9]{3}))

如果不能,则需要4位数或3位数。