例子:
>>> convert('CamelCase')
'camel_case'
例子:
>>> convert('CamelCase')
'camel_case'
当前回答
下面是我更改制表符分隔的文件头部的一些操作。我省略了只编辑文件第一行的部分。你可以用re库很容易地将它适应Python。这还包括分离数字(但保持数字在一起)。我分两步完成,因为这比告诉它不要在行或制表符的开头放下划线更容易。
第一步……查找大写字母或小写字母前面的整数,并在它们前面加下划线:
搜索:
([a-z]+)([A-Z]|[0-9]+)
替换:
\1_\l\2/
第二步……使用上面的代码并再次运行它,将所有大写字母转换为小写字母:
搜索:
([A-Z])
替换(即反斜杠,小写L,反斜杠,1):
\l\1
其他回答
避免使用库和正则表达式:
def camel_to_snake(s):
return ''.join(['_'+c.lower() if c.isupper() else c for c in s]).lstrip('_')
>>> camel_to_snake('ThisIsMyString')
'this_is_my_string'
这么多复杂的方法…… 只需找到所有“标题”组,并加入其小写变体与下划线。
>>> import re
>>> def camel_to_snake(string):
... groups = re.findall('([A-z0-9][a-z]*)', string)
... return '_'.join([i.lower() for i in groups])
...
>>> camel_to_snake('ABCPingPongByTheWay2KWhereIsOurBorderlands3???')
'a_b_c_ping_pong_by_the_way_2_k_where_is_our_borderlands_3'
如果你不想让数字像组的第一个字符或单独的组-你可以使用([A-z][a-z0-9]*)掩码。
在标准库中没有,但我发现这个模块似乎包含您需要的功能。
下面是我更改制表符分隔的文件头部的一些操作。我省略了只编辑文件第一行的部分。你可以用re库很容易地将它适应Python。这还包括分离数字(但保持数字在一起)。我分两步完成,因为这比告诉它不要在行或制表符的开头放下划线更容易。
第一步……查找大写字母或小写字母前面的整数,并在它们前面加下划线:
搜索:
([a-z]+)([A-Z]|[0-9]+)
替换:
\1_\l\2/
第二步……使用上面的代码并再次运行它,将所有大写字母转换为小写字母:
搜索:
([A-Z])
替换(即反斜杠,小写L,反斜杠,1):
\l\1
如果你使用谷歌的(几乎)确定性骆驼案例算法,那么就不需要处理像HTMLDocument这样的东西,因为它应该是HTMLDocument,那么这种基于正则表达式的方法很简单。它用下划线替换所有的大写字母或数字。Note不处理多位数数字。
import re
def to_snake_case(camel_str):
return re.sub('([A-Z0-9])', r'_\1', camel_str).lower().lstrip('_')