Python recipe(7): 命名规则转换

python

代码何在?

Example Source Code [http://www.cnblogs.com/tomsheep/]

'''

Created on 2010-5-21

@author: lk

'''

import re,string

#cw: capwords

#us: underscore

#mc: mixed-case

#lw: lower-case

def cw2us(x):

return re.sub(r'(?<=[a-z])[A-Z]|(?<!^)[A-Z](?=[a-z])', r'_\g<0>', x).lower()

def us2mc(x):

return re.sub(r'_([a-z])', lambda match:match.group(1).upper(), x)

def mc2us1(x):

return cw2us(x)

def us2cw(x):

# return ''.join(map(string.capitalize,x.split('_')))

s = us2mc(x)

return s[0].upper()+s[1:]

def mc2cw1(x):

return x[0].upper()+x[1:]

def cw2mc1(x):

return x[0].lower()+x[1:]

def any2lw(x):

lw = x.split('_')

if(len(lw)>1): #underscore style

return map(string.lower, lw)

#otherwise

pieces = re.split('([A-Z])',x)

if pieces[0]:#begin with a non-capital char

pieces = ['']+pieces #for the method below

else:

pieces = pieces[1:]

return [pieces[i].lower()+pieces[i+1] for i in range(0, len(pieces), 2)]

def lw2us(x):return '_'.join(x)

def lw2cw(x):return ''.join(map(string.capitalize, x))

def lw2mc(x):return x[0]+lw2cw(x[1:])

def any2us(x): return lw2us(any2lw(x))

def any2cw(x): return lw2cw(any2lw(x))

def any2mc(x): return lw2mc(any2lw(x))

if __name__ == '__main__':

x = "ILikeHTML"

y = cw2us(x)

z = us2mc(y)

w = us2cw(y)

print x,y,z,w

# print re.split('([A-Z])',x)

# print x.split('([A-Z])')

print any2cw(x)

print any2mc(x)

print any2us(x)

print any2lw(x)

以上代码改写自Python Cookbook 3-16

概述:

    在不同的命名规则(如下划线分割法、驼峰法、词汇首字母大写法等)之间相互转换。给出两套方案:第一种利用re模块一对一地转换,这种方法不太具有拓展性,一旦命名规则种类增多,需添加大量转换函数;第二种提供了一种通用的中间形式,即小写list,只需提供各种命名规则与小写list之间的转换规则即可。(本代码第二种实现与第一种效果略有不同,主要体现在连续大写字母的处理上)

代码说明:

1.正则表达式中的“0宽断言”:

(?=exp): 在断言自身后匹配exp

(?>=exp): 在断言自身前匹配exp

(?!exp): 在断言自身后不能出现exp匹配

(?<!exp)在断言自身前不能出现exp匹配

更多正则表达式资料见:正则表达式30分钟入门教程

2.在cw2us函数中,使用re.sub函数时第二个参数传了 r’_\g<0>’, 这里的g<0>既表示match.group(0)

3.re.split和string对象的split区别在于后者不能使用正则表达式……汗,原来先入为主以为可以……

4.过去一直想为什么很多对象已经提供的函数,模块又要提供一遍,比如re和string;现在感觉也许一定程度是为了书写便捷,比如map用起来很方便(- -|||露怯……随着学习深入以后应该会有新的认识……)

以上是 Python recipe(7): 命名规则转换 的全部内容, 来源链接: utcz.com/z/388823.html

回到顶部