ChicagoTurabian/sver
ChicagoTurabian/warnachinka
t1import ret1import re
22
33
4def process_n(n):4def process_n(n):
5    names = []5    names = []
6    title = ''6    title = ''
7    printer = ''7    printer = ''
8    f = re.search(r'(^[\d]+\.) ', n)8    f = re.search(r'(^[\d]+\.) ', n)
9    if f:9    if f:
10        n = n[f.end():]10        n = n[f.end():]
11    else:11    else:
12        return False12        return False
13    f = re.search(13    f = re.search(
14        r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+)',14        r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+)',
15        n)15        n)
16    if f:16    if f:
17        names.append(f.group())17        names.append(f.group())
18        n = n[f.end():]18        n = n[f.end():]
19    else:19    else:
20        return False20        return False
21    f = re.match(r'(,) | (and) | (et al)\., ', n)21    f = re.match(r'(,) | (and) | (et al)\., ', n)
22    if not f:22    if not f:
23        return False23        return False
24    elif f.group() == ' and ':24    elif f.group() == ' and ':
25        n = n[5:]25        n = n[5:]
26        f = re.search(26        f = re.search(
27            r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+), (.*) \((.*)\), [\d\-–]+\.$',27            r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+), (.*) \((.*)\), [\d\-–]+\.$',
28            n)28            n)
29        if not f:29        if not f:
30            return False30            return False
31        names.append(f.groups()[0])31        names.append(f.groups()[0])
32        title = f.groups()[1]32        title = f.groups()[1]
33        printer = f.groups()[2]33        printer = f.groups()[2]
34    elif f.group() == ' et al., ':34    elif f.group() == ' et al., ':
35        n = n[f.end():]35        n = n[f.end():]
36        names.append('any')36        names.append('any')
37        f = re.search(r'(.*) \((.*)\), [\d\-–]+\.$', n)37        f = re.search(r'(.*) \((.*)\), [\d\-–]+\.$', n)
38        if not f:38        if not f:
39            return False39            return False
40        title = f.groups()[0]40        title = f.groups()[0]
41        printer = f.groups()[1]41        printer = f.groups()[1]
42    else:42    else:
43        n = n[2:]43        n = n[2:]
44        v = re.search(44        v = re.search(
45            r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+),? and ((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+)',45            r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+),? and ((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+)',
46            n)46            n)
47        if v:47        if v:
48            f = re.search(48            f = re.search(
49                r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+),? and '49                r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+),? and '
50                r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+), (.*) \((.*)\), [\d\-–]+\.$', n)50                r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+), (.*) \((.*)\), [\d\-–]+\.$', n)
51            if not f:51            if not f:
52                return False52                return False
53            names.append(f.groups()[0])53            names.append(f.groups()[0])
54            names.append(f.groups()[1])54            names.append(f.groups()[1])
55            title = f.groups()[2]55            title = f.groups()[2]
56            printer = f.groups()[3]56            printer = f.groups()[3]
57        else:57        else:
58            f = re.search(r'(.*) \((.*)\), [\d\-–]+\.$', n)58            f = re.search(r'(.*) \((.*)\), [\d\-–]+\.$', n)
59            if not f:59            if not f:
60                return False60                return False
61            title = f.groups()[0]61            title = f.groups()[0]
62            printer = f.groups()[1]62            printer = f.groups()[1]
63    return [names, title, printer]63    return [names, title, printer]
6464
6565
66def process_b(b):66def process_b(b):
67    names = []67    names = []
68    title = ''68    title = ''
69    printer = ''69    printer = ''
70    f = re.search(70    f = re.search(
71        r'([A-Z][A-Za-z\-]+, (?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)?)',71        r'([A-Z][A-Za-z\-]+, (?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)?)',
72        b)72        b)
73    if not f:73    if not f:
74        return False74        return False
75    names.append(f.group())75    names.append(f.group())
76    b = b[f.end():]76    b = b[f.end():]
77    f = re.match(r'( )|(\. )|(, and )|(, )', b)77    f = re.match(r'( )|(\. )|(, and )|(, )', b)
78    if not f:78    if not f:
79        return False79        return False
8080
81    if f.group() == ', ' or f.group() == ', and ':81    if f.group() == ', ' or f.group() == ', and ':
82        while f.group() == ', ':82        while f.group() == ', ':
83            b = b[2:]83            b = b[2:]
84            f = re.search(84            f = re.search(
85                r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+)', b)85                r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+)', b)
86            if not f:86            if not f:
87                return False87                return False
88            names.append(f.group())88            names.append(f.group())
89            b = b[f.end():]89            b = b[f.end():]
90            f = re.match(r'(, and )|(, )', b)90            f = re.match(r'(, and )|(, )', b)
91            if not f:91            if not f:
92                return False92                return False
9393
94        b = b[f.end():]94        b = b[f.end():]
95        f = re.search(95        f = re.search(
96            r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+)\. ', b)96            r'((?:[A-Z]\.|[A-Za-z]+)(?: ?[A-Z]\.| ?[A-Z][a-z]+)? [A-Z][A-Za-z\-]+)\. ', b)
97        if not f:97        if not f:
98            return False98            return False
99        names.append(f.groups()[0])99        names.append(f.groups()[0])
100100
101    b = b[f.end():]101    b = b[f.end():]
102    f = re.search(r'(.*)\. (.*)\.', b)102    f = re.search(r'(.*)\. (.*)\.', b)
103    if not f:103    if not f:
104        return False104        return False
105    title = f.groups()[0]105    title = f.groups()[0]
106    printer = f.groups()[1]106    printer = f.groups()[1]
107    return [names, title, printer]107    return [names, title, printer]
108108
109109
110def compare(n, b):110def compare(n, b):
111    names1, title1, printer1 = n111    names1, title1, printer1 = n
112    names2, title2, printer2 = b112    names2, title2, printer2 = b
113    if title1 != title2 or printer1 != printer2:113    if title1 != title2 or printer1 != printer2:
114        return False114        return False
115    k = names2[0].split(', ')115    k = names2[0].split(', ')
116    g = k[0]116    g = k[0]
117    k[0] = k[1]117    k[0] = k[1]
118    k[1] = g118    k[1] = g
119    names2[0] = ' '.join(k)119    names2[0] = ' '.join(k)
120    if len(names1) > 1 and names1[1] == 'any':120    if len(names1) > 1 and names1[1] == 'any':
121        if len(names2) < 4:121        if len(names2) < 4:
122            return False122            return False
123        return names1[0] == names2[0]123        return names1[0] == names2[0]
124    return names1 == names2124    return names1 == names2
125125
126126
127N = input()127N = input()
128B = input()128B = input()
129n = process_n(N)129n = process_n(N)
130b = process_b(B)130b = process_b(B)
131if not n or not b:131if not n or not b:
132    print(False)132    print(False)
133else:133else:
134    print(compare(n, b))134    print(compare(n, b))
135135
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op