ใช้ Regular Expression (regex) เพื่อแทรก underscore ก่อนตัวอักษรใหญ่แล้วแปลงเป็นตัวเล็กทั้งหมด
โค้ด
import re
def convert(name):
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
print(convert('JavaBeans')) # java_beans
print(convert('JavaStrutsSwing')) # java_struts_swing
ผลลัพธ์
java_beans java_struts_swing
Regex แรกจัดการตัวใหญ่ตามด้วยตัวเล็ก (เช่น B ใน Beans) Regex ที่สองจัดการตัวเล็ก/ตัวเลขตามด้วยตัวใหญ่