2016-09-19 70 views
0

我真的试图分裂重命名面色有些难看变量名(作为一个例子):劈裂字符串前瞻/向后断言为空字符串匹配

In[1]: import re 
     ugly_names = ['some-Ugly-Name', 'ugly:Case:Style', 'uglyNamedFunction'] 
     new_names = [] 

In[2]: patt = re.compile(r'(?<=[a-z])[\-:]?(?=[A-Z])') 

In[3]: for name in ugly_names: 
      loc_name = patt.split(name) 
      new_names.append("_".join(s.lower() for s in loc_name)) 

     print(new_names) 

Out[3]: ['some_ugly_name', 'ugly_case_style', 'uglynamedfunction'] 

这有什么错我的模式?为什么它不匹配空字符串,或者我错过了什么?

p.s.:Python的regex可能在空字符串上分割,还是应该使用其他一些函数和.groups()

+0

Python的're.split'不能用空字符串分割。使用PyPi正则表达式模块。 –

回答

2

没有直接回答这个问题,只是另一种方式 - 使用inflection library(需要单独处理:虽然):

>>> import inflection 
>>> 
>>> [inflection.underscore(name.replace(":", "_")) for name in ugly_names] 
['some_ugly_name', 'ugly_case_style', 'ugly_named_function']