fork download
  1. import re
  2. pattern = r'_?[A-Z]{2,}_?|([A-Z](?:_[A-Z](?![A-Z]))+)'
  3. s = ("A_B_CDEF_GHI\n"
  4. "A_B_C_DEF_G_H_I\n"
  5. "ABC_D_E_F_GHI\n"
  6. "ABCDEFG_H_I\n"
  7. "A_B_C")
  8.  
  9. res = re.sub(pattern, lambda x: x.group(1).replace("_", "") if x.group(1) else x.group(), s)
  10. print(res)
Success #stdin #stdout 0.03s 9476KB
stdin
Standard input is empty
stdout
AB_CDEF_GHI
ABC_DEF_GHI
ABC_DEF_GHI
ABCDEFG_HI
ABC