2

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

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

寻找

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

代替

\2

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

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

谢谢

4

2 回答 2

1

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

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

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

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

于 2014-08-06T11:33:21.090 回答
0

试试这个:

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

它将需要 4 位数字,如果不能,则需要 3 位数字。

于 2014-08-06T11:38:15.633 回答