如何用正则表达式 匹配正确的imei串号呢!imei格式:由0-9数字组成的15或者17位的串号?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用正则表达式 匹配正确的imei串号呢!imei格式:由0-9数字组成的15或者17位的串号?相关的知识,希望对你有一定的参考价值。

如何用正则表达式 匹配正确的imei串号呢!imei格式:由0-9数字组成的15或者17位的串号?
var regex=/^[0-9]15,17$/;
目前的表达式,能匹配15、16、17位的,如何才能满足只匹配15或者17位,16位不需要?谢谢!

参考技术A

我不知道你使用的是什么脚本,这里只给你提供思想:

    从你提的这个问题真的看出,对正则表达式不太熟悉,建议你好好去一下研究正则表达式;

    表达式中的15,17是只15到17,就包含了16;

    需要使用"或",应该是15或17;建议你查一下脚本正则表达式"或"是怎么用的;

    给3个gvim正在表达式的事例,你可以参考一下

    (1)   /^[0-9]\\15$\\|^[0-9]\\17$/

    (2)   /^\\d\\15$\\|^\\d\\17$/

    (3)   /^\\(\\d\\15\\|\\d\\17\\)$/

本回答被提问者和网友采纳
参考技术B var regex=/^(\\d15|\\d17)$/;

如何用正则表达式替换多个匹配项/组?

通常,我们将编写以下内容替换一个匹配项:

namesRegex = re.compile(r'(is)|(life)', re.I)
replaced = namesRegex.sub(r"butter", "There is no life in the void.")
print(replaced)

output:
There butter no butter in the void.

我想要的是用特定的文本替换每个组,可能使用反向引用。即我想用“ are”代替第一组(is),用“ butterfly”代替第二组(life)。

也许是这样。但是以下代码无效。

namesRegex = re.compile(r'(is)|(life)', re.I)
replaced = namesRegex.sub(r"(are) (butterflies)", r"\1 \2", "There is no life in the void.")
print(replaced)

是否有一种方法可以在python中的一个语句中替换多个组?

答案

您可以使用lambda替换,映射要关联的关键字:

>>> re.sub(r'(is)|(life)', lambda x: {'is': 'are', 'life': 'butterflies'}[x.group(0)], "There is no life in the void.")
'There are no butterflies in the void.'
另一答案

您可以先定义键和替换的映射,然后使用lambda function in replacement

>>> repl = {'is': 'are', 'life': 'butterflies'}
>>> print re.sub(r'is|life', lambda m: repl[m.group()], "There is no life in the void.")
There are no butterflies in the void.

我还将建议您在按键周围使用单词边界来保护您的搜索模式:

>>> print re.sub(r'\b(?:is|life)\b', lambda m: repl[m.group()], "There is no life in the void.")
There are no butterflies in the void.
另一答案

您可以使用具有搜索替换值的字典,并使用简单的\w+正则表达式来匹配单词:

import re
dt = {'is' : 'are', 'life' : 'butterflies'}
namesRegex = re.compile(r'\w+')
replaced = namesRegex.sub(lambda m: dt[m.group()] if m.group() in dt else m.group(), "There is no life in the void.")
print(replaced)

参见Python demo

使用这种方法,您不必担心基于交替创建太大的正则表达式模式。您可以根据要求调整模式以包括单词边界,或仅匹配字母(例如[\W\d_]+)等。要点是,该模式应与字典中所有作为关键字的搜索词匹配。

if m.group() in dt else m.group()部分正在检查找到的匹配项是否作为字典中的键存在,如果不存在,则将匹配项返回。否则,返回字典中的值。

另一答案

如果您只想替换特定的单词,则不要超过str.replace()

str.replace()

以上是关于如何用正则表达式 匹配正确的imei串号呢!imei格式:由0-9数字组成的15或者17位的串号?的主要内容,如果未能解决你的问题,请参考以下文章

如何用正则表达式检测ip是不是正确,求详解

手机串号开发思路运行原理解剖

如何用js匹配url的正则表达式

如何用正则表达式在JS中匹配出相应的拓展名?

如何用正则表达式匹配IP地址

如何用正则表达式匹配汉字