首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex从字符串中提取ICCID

使用regex从字符串中提取ICCID
EN

Stack Overflow用户
提问于 2016-09-23 12:37:42
回答 3查看 2.1K关注 0票数 3

我试图在设备中返回并打印SIM卡的ICCID;SIM卡来自不同的供应商,因此长度不同( 19位或20位)。因此,我正在寻找一个正则表达式,该表达式将提取ICCID (其周围的非单词字符是不可知论的)。

考虑到ICCID被指定为以"89“开头的19-20位字符串,我只需选择:

代码语言:javascript
复制
(89\d{17,18})

这是我测试过的最成功的模式(还有一些模式由于下面的原因而被拒绝)。

在我要从中提取它的字符串中,ICCID紧接着是一个回车,然后是一个行提要,但是一些针对用\r\n甚至\b终止它的测试失败了(我正在使用的程序是构建在python上的内部程序,因此我怀疑它是用于regex的)。此外,简单地使用(\d{19,20})最终提取了20位ICCID的最后19位数字(作为第三位也是最后一次有效匹配)。按照同样的思路,我原则上排除了(\d{19,20})?,因为当它找到前19位数时,它就会结束。

所以我的问题是:应该使用我选择的模式,还是有更好的表达式(而不是使用非单词字符来设置字符串)来返回可变长度数字字符串中最长的子字符串?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-23 13:02:55

如果幕后的引擎实际上是Python,并且您需要提取的值周围可能有任何非数字字符,那么使用lookarounds来限制值周围的上下文:

代码语言:javascript
复制
(?<!\d)89\d{17,18}(?!\d)
^^^^^^^         ^^^^^^

在匹配之前,(?<!\d)后置将需要一个数字的and,而(?!\d)负前瞻将要求在该值之后没有一个数字。

请参阅这个regex演示

票数 1
EN

Stack Overflow用户

发布于 2016-09-23 12:48:14

我会去

代码语言:javascript
复制
89\d{17,18}[^\d]

这应该是18位数,但17位数也足够了。在此之后,将不再允许其他数字字符。

唯一的限制: ICCID之后必须有至少一个字符(根据您所描述的,这应该是可以的)。

请注意,任何带有"89“和17或18个数字字符的更长的数字序列也会匹配。

票数 1
EN

Stack Overflow用户

发布于 2016-09-23 13:12:44

代码语言:javascript
复制
(\d+)\D+ 

看来它很快就能起作用了。(\d+ )将捕获20个数字。之后,\D+将与其他任何东西匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39660961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档