对于空字符串匹配,使用lookahead / lookbehind断言分割字符串

时间:2016-09-19 21:54:31

标签: python regex split

我正在尝试拆分重命名一些丑陋的变量名称(例如):

 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()

1 个答案:

答案 0 :(得分:2)

不是问题的直接答案,只是另一种方式 - 使用inflection library(必须单独处理:):

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