У меня есть несколько правил, которые должны удовлетворять передаваемой строке.Ниже приведены правила:
Windows должна быть написана как «Windows», и не должно быть никаких торговых марок.
Ни одно из слов не должно быть сокращено как «победа», «победа», «победа7», победа8, «победа10».Язык также в полной форме.Не «англ», это должен быть «английский».
64 бита, 32 бита и т. Д. Должны быть упомянуты перед языком и после слов «home» или «pro».
Не должно быть «Microsoft» до ОС Windows.
«Один язык / многоязычный» должен быть до 64 бит и после «Домой».
В ОС, если упоминается Windows 10, но Home и Pro не упоминаются.Один из них должен быть упомянут.
Пример: Windows 10 home Single Language / Windows 10 pro / Windows 10 home Single Language 64 бит / Windows 10 home Single Language 64 бит Испанский / Windows 10 Pro Multi language 64 бит Английский,Испанский / Windows 10 home, один язык, 64 бит;это должно пройти.
Но Windows 10 / Microsoft Windows 10 / Windows 10 home 64-битная версия Single Language / Windows 10 home, 64-битная версия, Single Language / Windows 7 Home 64-битная версия;они не должны проходить.
Примечание: основной скелет для прохождения:
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)).
Один или несколько языков могут быть или не быть, но если это так, то должно быть после home / proи до 64/32 бит.64/32 бит может или не может быть там, но он должен быть после одного / нескольких языков, если он там есть.
Это то, что я придумал, но это прохождение "Windows 10 home, 64 bit, Single Language"что не должно происходить:
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) ):
pass
else:
elem=' '.join(elem.split())
elem=elem+'\n'
ErrorList.append(elem)