我会尽力为您翻译中文,以下是需要翻译的内容,涉及IT技术。本文主要讲述如何打印设备中SIM卡的ICCID号码,由于SIM卡来自不同供应商,因此长度可能不同(19或20位数字)。因此,我正在寻找一个正则表达式,以提取ICCID(并忽略其周围的非单词字符)。
考虑到ICCID是以“89”开头的19-20位数字字符串,我选择了以下正则表达式:
考虑到ICCID是以“89”开头的19-20位数字字符串,我选择了以下正则表达式:
(89\d{17,18})
这是我测试过的最成功的模式之一(还有一些被拒绝的模式,原因如下)。
在我要提取的字符串中,ICCID紧接着回车和换行符,但是使用 \r
、\n
或者 \b
结束提取都失败了(我使用的程序是基于Python构建的内部程序,所以我猜测它在使用正则表达式)。而且,简单地使用 (\d{19,20})
最终提取出来的是20位ICCID中的最后19位(作为第三个也是最后一个有效匹配)。同样的,基于同样的考虑,我排除了 (\d{19,20})?
,因为我希望它在找到前19位数字时就结束。
所以我的问题是:我应该使用我选择的模式,还是有更好的表达式(不使用非单词字符来框定字符串),可以返回变长数字串的最长子串?
\d{19,20}
只匹配了19个字符而不是20个 - 量词是贪婪的。 - Wiktor Stribiżew