我们有一个字典词典,如下所示:
modelRE = {
'APPLE':
{
'MAC MINI MA206LL/A': re.compile(r'^(?=.*\bMAC\b)(?=.*\bMINI\b)(?=.*\bMA206LL/A\b).*$', re.MULTILINE+re.IGNORECASE),
'MAC MINI MC816LL/A': re.compile(r'^(?=.*\bMAC\b)(?=.*\bMINI\b)(?=.*\bMC816LL/A\b).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK AIR MD760LL/A': re.compile(r'^(?=.*\bMACBOOK\b)(?=.*\bAIR\b)(?=.*\bMD760LL/A\b).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK AIR LINE': re.compile(r'^(?=.*\bMACBOOK\b)(?=.*\bAIR\b).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK PRO MC024LL/A': re.compile(r'^(?=.*\bMACBOOK\b)(?=.*\bPRO\b)(?=.*\bMC024LL/A\b).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK PRO MD10xLL/A': re.compile(r'^(?=.*\bMACBOOK\b)(?=.*\bPRO\b)(?=.*\bMD10xLL/A\b).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK PRO ME293LL/A': re.compile(r'^(?=.*\bMACBOOK\b)(?=.*\bPRO\b)(?=.*\bME293LL/A\b).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK PRO ME294LL/A': re.compile(r'^(?=.*\bMACBOOK\b)(?=.*\bPRO\b)(?=.*\bME294LL/A\b).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK PRO ME86xLL/A': re.compile(r'^(?=.*MACBOOK)(?=.*PRO)(?=.*ME86xLL/A).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK PRO MF840LL/A': re.compile(r'^(?=.*\bMACBOOK\b)(?=.*\bPRO\b)(?=.*\bMF840LL/A\b).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK PRO MJLT2LL/A': re.compile(r'^(?=.*\bMACBOOK\b)(?=.*\bPRO\b)(?=.*\bMJLT2LL\/A\b).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK PRO Z0QN': re.compile(r'^(?=.*\bMACBOOK\b)(?=.*\bPRO\b)(?=.*\bZ0QN\b).*$', re.MULTILINE+re.IGNORECASE),
'MACBOOK PRO LINE': re.compile(r'^(?=.*\bMACBOOK\b)(?=.*\bPRO\b).*$', re.MULTILINE+re.IGNORECASE)
},
.
.
.
但是我们的正则表达式方法确实存在一些问题,你可以在这里看到一些实验。这个文档大约有7000行,因此我希望每次定义时保持正则表达式的一致性。
基本上,我们在700,000行计算机上规范化型号,受到已经标准化的制造商的限制。
我们也有这样的行(另一个实验):
'ELITEBOOK 2760P': re.compile(r'^(?=.*\b2760P\b)(Elite).*$', re.MULTILINE+re.IGNORECASE),
总而言之,我们希望在每个正则表达式中匹配多个子字符串。当我们' .search'正则表达式返回true时它,它必须包含任何顺序的子串。
例如(伪正则表达式):
substring(MAC) && substring(MINI) && substring(MA206LL/A) IN ANY ORDER
这应该匹配:
'MAC MINI MA206LL/A'
'MINI MAC MA206LL/A'
'MACMINI MA206LL/A'
'MAC-MINI-MA206LL/A'
'BIGMACandFRIES-MINI-MA206LL/A'
'MAC MINIMOUSE MA206LL/A'
'MAC MINI MA206LL/A-R321'
答案 0 :(得分:1)
为什么不做一些字符串检查?
foo = 'MAC '
bar = 'MINI'
baz = 'MA206LL/A'
for item in modelRE['APPLE']:
if foo in item and bar in item and baz in item:
print(item)
答案 1 :(得分:0)
这是你如何做有效的包含和包含。
re.compile(' ^(?=。* ACE)(?=。 4710)。 $',re.MULTILINE + re.IGNORECASE)