我有一些规则应该满足传递的字符串。以下是规则:
Windows 应该写成“Windows”,并且不应该有任何商标。
任何单词都不应缩写为“win”、“wins”、“win7”、win8、“win10”。语言也完整。没有“eng”,应该是“English”。
64bit、32bit 等应该在语言之前和“home”或“pro”之后提到。
在 Windows 操作系统之前不应该有“微软”。
“单语言/多语言”应在 64 位之前,“家”之后。
在操作系统中,如果它提到了 Windows 10,但没有提到 Home 和 Pro。必须提到其中之一。
示例:Windows 10 家庭版单语言/Windows 10 家庭版/Windows 10 家庭版单语言 64 位/Windows 10 家庭版单语言 64 位西班牙语/Windows 10 专业版多语言 64 位英语、西班牙语/Windows 10 家庭版、单语言、64 位;这些应该会通过。
但是Windows 10/Microsoft Windows 10/Windows 10 home 64 bit Single Language/Windows 10 home, 64 bit, Single Language/Windows 7 Home 64 bit multi language;这些不应该通过。
注意:要传递的基本骨架是:
Windows(space or comma)(10 or 7 or 8.1)(space or comma)(home or pro or professional)(space or comma)(single language or multi language)(space or comma)(64 bit or 32 bit)(space or comma)(language(s)).
单/多语言可能存在也可能不存在,但如果存在,则应该在家庭/专业版之后和 64/32 位之前。64/32 位可能存在也可能不存在,但如果存在,则应该在单/多语言之后。
这是我想出的,但它通过的“Windows 10 家庭版,64 位,单一语言”不应该发生:
filter_exp = r'(Windows)\s(10)\s(Home\b|Pro\b)([$,\s\b])?((\s)?(Single Language|Multi Language|\w)(\s(64bit|64-bit|32bit|32-bit)))?'
filter_exp1 = r'(Windows)\s(7|8.1)\s(Professional\b)([$,\s\b])?((\s)?(Single Language|Multi Language|\w)(\s(64bit|64-bit|32bit|32-bit)))?'
我最终写了这个,现在它似乎正在工作,但这可能很少有测试用例失败:
filter_exp = r'(Windows)\s(10)\s(Home|Pro)([$,\s\b])?((\s)?(Single Language|Multi Language|\w)(\s(64bit|64-bit|32bit|32-bit)))?'
#filter_exp = r'^(Windows)\s(10)\s(Home\b|Pro\b)([$,\s\b])?((\s)?(Single Language|Multi Language|\w)(\s(64bit|64-bit|32bit|32-bit)))?$'
filter_exp1 = r'(Windows)\s(7|8.1)\s(Professional)([$,\s\b])?((\s)?(Single Language|Multi Language|\w)(\s(64bit|64-bit|32bit|32-bit)))?'
filter_exp3= r'(64bit|64-bit|32bit|32-bit)[\s,.]*(Single Language|Multi Language)'
filter_sym = u'Windows\N{REGISTERED SIGN}'
if ((re.findall(filter_exp, elem) or re.findall(filter_exp1, elem)) and not re.findall(filter_sym, elem) and not re.findall(filter_exp3,elem) ):
人到中年有点甜
相关分类