2016-09-19 78 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']