AB
Size: a a a
AB
M
M
GK
GK
С
GK
PT
KR
KR
NK
KR
DS
DS
PT
статус назва дамы
ці статус назва дом - дом (бок)
DS
статус назва дамы
ці статус назва дом - дом (бок)
DS
PT
LL = 'абвгдеёжзіийклмнопрстуўфхцчшщьыъэюя'
LU = 'АБВГДЕЁЖЗІИЙКЛМНОПРСТУЎФХЦЧШЩЫЬЪЭЮЯ'
NM = '1234567890'
LA = LL + LU
LN = LA + NM
S_STAT = rf'_s\w+(1|N)_'
S_NAME = rf'([{NM}]+-(й|я) )?(имени |имени газеты |[{NM}]+ лет )?([{LU}]\. ?)?([{LU}]\. ?)?([{LU}][{LL}]+( |-| и ))?[{LU}][{LL}]+( [{NM}]+-й дивизии)?(_sTrakt1_|_sBor1_|_sKolco1_|_sLinija1_|_sSlabada1_)?'
S_NAMES = rf'((?P<p_nums>[{NM}]+-(й|я|ый|ой)(, [{NM}]+-(й|я|ый|ой))*)( и (?P<p_num>[{NM}]+-(й|я|ый|ой)))? )?(?P<name>([{LU}]\.)?([{LU}]\.)?([{LU}][{LL}]+ )?[{LU}][{LL}]+(_sTrakt1_|_sBor1_|_sKolco1_|_sLinija1_|_sSlabada1_)?)'
H_STAT = rf'_h\w+(1|N)_'
H_PARTS = rf'((_k_)? ?[{NM}{LA}]+(, ?[{NM}{LA}]+)*)'
H_NUM = rf'[{NM}]+ ?[{LA}]?(/[{NM}]+)?( ?\({H_PARTS}\)| _k_ [{NM}]+)?'
H_NUMR = rf'[{NM}]+[{LA}]?(/[{NM}]+)?( \({H_PARTS}\))? ?- ?[{NM}]+[{LA}]?(/[{NM}]+)?( \({H_PARTS}\))?( ?\((_hCside_|_hNside_|_hExcept(1|N)_ [{NM}]+(, [{NM}]+)*)\))?'
H_NUMS = rf'({H_NUM}|{H_NUMR})(, ?({H_NUM}|{H_NUMR}))*'
H_SIMPLE = re.compile(rf'^(?P<num>[{NM}]+) ?(?P<liter>[{LA}])?(/(?P<slash>[{NM}]+))?( _k_ (?P<k>[{NM}]+))?$')
H_KORP = re.compile(rf'^(?P<num>[{NM}]+) ?(?P<liter>[{LA}])?(/(?P<slash>[{NM}]+))? ?\((_k_)? ?(?P<ks>[{NM}{LA}]+(, ?[{NM}{LA}]+)*)\)$')
H_RANGE = re.compile(rf'^(?P<num1>[{NM}]+)(?P<liter1>[{LA}])?(/(?P<slash1>[{NM}]+))?( \((_k_)? ?(?P<ks1>[{NM}{LA}]+(, ?[{NM}{LA}]+)*)\))? ?- ?(?P<num2>[{NM}]+)(?P<liter2>[{LA}])?(/(?P<slash2>[{NM}]+))?( \((_k_)? ?(?P<ks2>[{NM}{LA}]+(, ?[{NM}{LA}]+)*)\))?( ?\((?P<side>(_hCside_|_hNside_))\))?$')
H_EXCEPT = re.compile(rf'^(?P<num1>[{NM}]+)(?P<liter1>[{LA}])?(/(?P<slash1>[{NM}]+))?( \((_k_)? ?(?P<ks1>[{NM}{LA}]+(, ?[{NM}{LA}]+)*)\))? ?- ?(?P<num2>[{NM}]+)(?P<liter2>[{LA}])?(/(?P<slash2>[{NM}]+))?( \((_k_)? ?(?P<ks2>[{NM}{LA}]+(, ?[{NM}{LA}]+)*)\))?( ?\(_hExcept(1|N)_ (?P<except>[{NM}]+(, [{NM}]+)*)\))$')
S_SEP = rf'(;|\.|\,|\.?$)'
@re_dec(rf'^((?P<stat>{S_STAT}) )?(?P<name>{S_NAME}){S_SEP}')
@re_dec(rf'^((?P<stat>{S_STAT}) )?(?P<name>{S_NAME}) \((?P<num_side>(_hCside_|_hNside_))\){S_SEP}')
@re_dec(rf'^((?P<stat>{S_STAT}) )?{S_NAMES}{S_SEP}')
@re_dec(rf'^((?P<stat>{S_STAT}) )?(?P<name>{S_NAME})( ?- ?| ){H_STAT} (?P<nums>{H_NUMS}){S_SEP}')
PT