我有一个消息列表,我在该消息中搜索4位或3位数字,然后我将其替换为该号码。
所以我现在的正则表达式是
查找
(.*)([0-9]{3,4})(.*)\r
替换
\2
然而,问题是[0-9] {3,4}如果有4位数,则只占用前3位数,所以即使有4位数字序列,它也只会获取3位数字。这就是我不想要的。
有没有办法让它抓住一个4位数字,如果可以的话,如果它找不到该行中的4位数字,只能抓取3位数字。
由于
答案 0 :(得分:1)
正则表达式使用*?
运算符支持非贪婪:
(.*?)([0-9]{3,4})(.*)\r
根据您用来匹配正则表达式的程序,您需要添加其他标志。
在这种情况下,正则表达式更乐意为第二组提供数字而不是第一组。默认情况下,正则表达式从左到右是贪婪的:它们会尝试将所有内容存储在第一组中,并且只在必要时才移动到下一个(仍然匹配字符串)。
答案 1 :(得分:0)
试试这个:
(([0-9]{4})|([0-9]{3}))
如果不能,则需要4位数或3位数。