import re
text = "50. The SBI considered this sub-item at its resumed 1^st^ meeting and at its 2^nd^ meeting (see para. 46 above). It had before it documents FCCC/CP/2011/7 and Corr.1 and Add.1 and 2, FCCC/SBI/2010/17, FCCC/SBI/2010/26 and FCCC/SBI/2010/MISC.9. A statement was made on behalf of the LDCs."
rx_main = re .compile ( r'(FCCC/(?:SBSTA|SBI|CP|KP/CMP|PA/CMA)/\d {4}/(?:INF\. |L\. |MISC\. )?\d +)((?:(?:/|\s +and\s +|\s *,\s *)(?:Add|Rev|Corr)\. \d +(?:(?:\s *,\s *|\s +and\s +)\d +)*)*)' )
rx_rev = re .compile ( r'(?:Add|Rev|Corr)\. \d +(?:(?:\s *,\s *|\s +and\s +)\d +)*' )
rx_split = re .compile ( r'\s *,\s *|\s +and\s +' )
matches = rx_main.finditer ( text)
results = [ ]
for m in matches:
results.append ( m.group ( 1 ) )
chunks = [ rx_split.split ( x) for x in rx_rev.findall ( m.group ( 2 ) ) ]
for ch in chunks:
if len ( ch) == 1 : # it is simple, just add
results.append ( f"{m.group(1)}/{ch[0]}" )
else :
name = ch[ 0 ] .split ( '.' ) [ 0 ] # Rev, Corr or Add
for c in ch:
if '.' in c:
results.append ( f"{m.group(1)}/{c}" )
else :
results.append ( f"{m.group(1)}/{name}.{c}" )
print ( results)
aW1wb3J0IHJlCnRleHQgPSAiNTAuIFRoZSBTQkkgY29uc2lkZXJlZCB0aGlzIHN1Yi1pdGVtIGF0IGl0cyByZXN1bWVkIDFec3ReIG1lZXRpbmcgYW5kIGF0IGl0cyAyXm5kXiBtZWV0aW5nIChzZWUgcGFyYS4gNDYgYWJvdmUpLiBJdCBoYWQgYmVmb3JlIGl0IGRvY3VtZW50cyBGQ0NDL0NQLzIwMTEvNyBhbmQgQ29yci4xIGFuZCBBZGQuMSBhbmQgMiwgRkNDQy9TQkkvMjAxMC8xNywgRkNDQy9TQkkvMjAxMC8yNiBhbmQgRkNDQy9TQkkvMjAxMC9NSVNDLjkuIEEgc3RhdGVtZW50IHdhcyBtYWRlIG9uIGJlaGFsZiBvZiB0aGUgTERDcy4iCnJ4X21haW4gPSByZS5jb21waWxlKHInKEZDQ0MvKD86U0JTVEF8U0JJfENQfEtQL0NNUHxQQS9DTUEpL1xkezR9Lyg/OklORlwufExcLnxNSVNDXC4pP1xkKykoKD86KD86L3xccythbmRccyt8XHMqLFxzKikoPzpBZGR8UmV2fENvcnIpXC5cZCsoPzooPzpccyosXHMqfFxzK2FuZFxzKylcZCspKikqKScpCnJ4X3JldiA9IHJlLmNvbXBpbGUocicoPzpBZGR8UmV2fENvcnIpXC5cZCsoPzooPzpccyosXHMqfFxzK2FuZFxzKylcZCspKicpCnJ4X3NwbGl0ID0gcmUuY29tcGlsZShyJ1xzKixccyp8XHMrYW5kXHMrJykKbWF0Y2hlcyA9IHJ4X21haW4uZmluZGl0ZXIodGV4dCkKcmVzdWx0cyA9IFtdCmZvciBtIGluIG1hdGNoZXM6CglyZXN1bHRzLmFwcGVuZChtLmdyb3VwKDEpKQoJY2h1bmtzID0gW3J4X3NwbGl0LnNwbGl0KHgpIGZvciB4IGluIHJ4X3Jldi5maW5kYWxsKG0uZ3JvdXAoMikpXQoJZm9yIGNoIGluIGNodW5rczoKCQlpZiBsZW4oY2gpID09IDE6ICMgaXQgaXMgc2ltcGxlLCBqdXN0IGFkZAoJCQlyZXN1bHRzLmFwcGVuZChmInttLmdyb3VwKDEpfS97Y2hbMF19IikKCQllbHNlOgoJCQluYW1lID0gY2hbMF0uc3BsaXQoJy4nKVswXSAjIFJldiwgQ29yciBvciBBZGQKCQkJZm9yIGMgaW4gY2g6CgkJCQlpZiAnLicgaW4gYzoKCQkJCQlyZXN1bHRzLmFwcGVuZChmInttLmdyb3VwKDEpfS97Y30iKQoJCQkJZWxzZToKCQkJCQlyZXN1bHRzLmFwcGVuZChmInttLmdyb3VwKDEpfS97bmFtZX0ue2N9IikKCnByaW50KHJlc3VsdHMp