import re
pattern = r"(\( \( PERS\) \s *)((?:(?![()]|\s y\b ).)* y\b [^()]*?)\s *\) "
s = ( "((PERS) Marcos Sy y) ((PERS) Lucy) estuvieron ((VERB) jugando) sdds\n "
"ashsahghgsa ((PERS) María y Rosa ds) son alumnas de esa escuela y juegan juntas\n "
"ashsahghgsa ((PERS) María y Rosa ds y Test Person 1 y test person 2) son alumnas de esa escuela y juegan juntas" )
def custom_replacement( m) :
return m.group ( 1 ) + " y ((PERS) " .join ( [ p + ")" for p in re .split ( r"\s +y\b \s *" , m.group ( 2 ) ) if p] )
replaced_names = re .sub ( pattern, custom_replacement, s)
replaced_pers = re .sub ( r"(\( \( PERS\) [^()]*\) )\s *(?=\( \( PERS\) [^()]*\) )" , r"\1 y " , replaced_names)
print ( replaced_pers)
aW1wb3J0IHJlCgpwYXR0ZXJuID0gciIoXChcKFBFUlNcKVxzKikoKD86KD8hWygpXXxcc3lcYikuKSogeVxiW14oKV0qPylccypcKSIKcyA9ICgiKChQRVJTKSBNYXJjb3MgU3kgeSkgKChQRVJTKSBMdWN5KSBlc3R1dmllcm9uICgoVkVSQikganVnYW5kbykgc2Rkc1xuIgogICAgICAgICAgICAiYXNoc2FoZ2hnc2EgKChQRVJTKSBNYXLDrWEgeSBSb3NhIGRzKSBzb24gYWx1bW5hcyBkZSBlc2EgZXNjdWVsYSB5IGp1ZWdhbiBqdW50YXNcbiIKICAgICAgICAgICAgImFzaHNhaGdoZ3NhICgoUEVSUykgTWFyw61hIHkgUm9zYSBkcyB5IFRlc3QgUGVyc29uIDEgeSB0ZXN0IHBlcnNvbiAyKSBzb24gYWx1bW5hcyBkZSBlc2EgZXNjdWVsYSB5IGp1ZWdhbiBqdW50YXMiKQoKCmRlZiBjdXN0b21fcmVwbGFjZW1lbnQobSk6CiAgICByZXR1cm4gbS5ncm91cCgxKSArICIgeSAoKFBFUlMpICIuam9pbihbcCArICIpIiBmb3IgcCBpbiByZS5zcGxpdChyIlxzK3lcYlxzKiIsIG0uZ3JvdXAoMikpIGlmIHBdKQoKCnJlcGxhY2VkX25hbWVzID0gcmUuc3ViKHBhdHRlcm4sIGN1c3RvbV9yZXBsYWNlbWVudCwgcykKcmVwbGFjZWRfcGVycyA9IHJlLnN1YihyIihcKFwoUEVSU1wpW14oKV0qXCkpXHMqKD89XChcKFBFUlNcKVteKCldKlwpKSIsIHIiXDEgeSAiLCByZXBsYWNlZF9uYW1lcykKcHJpbnQocmVwbGFjZWRfcGVycyk=