【发布时间】:2015-03-07 18:13:04
【问题描述】:
我有一些用camelCase编写的python代码,但根据PEP 8变量名应该用snake_case编写。我写了一个小 sed 脚本,它设法接受任何小写字母 \1,后跟一个大写字母 \2 并将其转换为 \1_ 和一个小写 \2
find . -iname \*.py | xargs sed -i "s/\([a-z]\)\([A-Z]\)/\1_\L\2/g"
但是这会将 CamelCase 变成 Camel_case。根据相同的PEP 8 标准类名应以大写字母开头的驼峰式书写。
如何编写一个不涉及 CamelCase 而是将 camelCamelCamelCamel... 转换为 camel_camel_camel_camel... 的 sed 脚本?
我有一种感觉,我达到了正则表达式的限制,因为我必须保留以小写字母开头的单词的上下文,以获得未知数量的“驼峰”。我知道我可以在另一个工具中做到这一点,但我想知道 sed 是否可以做到这一点。一个证明这是不可能的论据也足够了。
我正在使用 GNU sed 4.2.2
【问题讨论】:
-
如果您认为不值得付出努力:pypi.python.org/pypi/autopep8
-
不管你想做什么,已经有一个 py 包,这不是很遗憾吗?
-
@jonrsharpe 不清楚 autopep8 甚至检测到 N* 错误。你能引用一个文档或一些示例代码吗?
-
更新:autopep8 不修复命名冲突。它使用 pep8 模块,它本身只检测这些违规行为:pep8.readthedocs.org/en/1.6.2/intro.html#error-codes。免责声明(页面顶部)明确指出不处理命名约定。