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



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

现在的正则表达式是

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

2

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

是否有一种方法可以让它抓取一个4位数的数字,如果它不能在该行中找到4位数的数字,则只抓取3位数的数字。

谢谢

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

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

根据你用来匹配正则表达式的程序,你需要添加额外的标志。

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

试试这个:

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

最新更新