天下一プログラマコンテスト2012 予選B B - camel_case

camel_case

やるだけ。だが、面倒くさい。こういう問題を、正規表現とかを使って、すっきり解けるようになりたい。

import re
c = raw_input()

if c=="_"*len(c):
    print c
    exit(0)

pre,suf = 0,0
while c[pre]=="_":
    pre+=1
while c[-suf-1]=="_":
    suf+=1
c = c[pre:]
if suf>0:
    c = c[:-suf]
#print pre,c,suf

def cam(c):
    if not c[0].islower():
        return ""
    if "_" in c:
        return ""
    W = []
    p = 0
    s = 0
    while p<len(c):
        if c[p].isupper():
            W += [c[s:p]]
            s = p
        p+=1
    W += [c[s:]]
    for i in range(len(W)):
        W[i] = W[i][0].lower()+W[i][1:]
    return "_".join(W)

def und(c):
    if "__" in c:
        return ""
    W = c.split("_")
    for w in W:
        if not w[0].islower():
            return ""
        for x in w:
            if x.isupper():
                return ""
    for i in range(1,len(W)):
        W[i] = W[i][0].upper()+W[i][1:]
    return "".join(W)

t = cam(c)
if t!="":
    print "_"*pre+t+"_"*suf
else:
    t = und(c)
    if t!="":
        print "_"*pre+t+"_"*suf
    else:
        print "_"*pre+c+"_"*suf