sed中camelCase到snake_的大小写,用于格式错误的python代码
我有一些用camelCase编写的python代码,但是根据变量名,应该用snake\u的case编写。我编写了一个小的sed脚本,它成功地获取了任何小写字母\1,后跟一个大写字母\2,并将其转换为\1和小写字母\2sed中camelCase到snake_的大小写,用于格式错误的python代码,python,regex,sed,Python,Regex,Sed,我有一些用camelCase编写的python代码,但是根据变量名,应该用snake\u的case编写。我编写了一个小的sed脚本,它成功地获取了任何小写字母\1,后跟一个大写字母\2,并将其转换为\1和小写字母\2 find . -iname \*.py | xargs sed -i "s/\([a-z]\)\([A-Z]\)/\1_\L\2/g" 然而,这将把CamelCase变成camelcou。根据同样的标准,类名应该用大写字母开头的CamelCase书写 如何编写一个不涉及Camel
find . -iname \*.py | xargs sed -i "s/\([a-z]\)\([A-Z]\)/\1_\L\2/g"
然而,这将把CamelCase变成camelcou。根据同样的标准,类名应该用大写字母开头的CamelCase书写
如何编写一个不涉及CamelCase但能翻译CAMELCAMEL的sed脚本。。。变成骆驼,骆驼,骆驼,骆驼
我有一种感觉,我正在达到正则表达式的极限,因为我必须保持以小写字母开头的单词的上下文,以表示未知数量的“驼峰”。我知道我可以在另一个工具中实现这一点,但我想知道sed是否可以实现这一点。有理由认为这是不可能的,也就足够了
我正在使用GNU sed 4.2.2尝试以下方法:
result = re.sub("([A-Z])", r"_\1", text, 0, re.MULTILINE)
其中一条评论提到,这可能是OP的方式,但在sed中尝试这一点很有启发性(我的意思是这是一个有趣的谜题) 这样做是可能的:
sed -r ':loop; /.*\<([a-z]+([A-Z][a-z]+)+)\>.*/ { h; s//\1/; s/([A-Z])/_\l\1/g; G; s/(.*)\n(.*)\<[a-z]+([A-Z][a-z]+)+\>(.*)/\2\1\4/; b loop }'
sed-r':循环;/.\*/{h;s/\1/;s/([A-Z])/\ul\1/g;g;s/(.*)\n(.*)\(.*)/\2\1\4/;b loop}'
代码是
:loop
/.*\<([a-z]+([A-Z][a-z]+)+)\>.*/ {
h
s//\1/
s/([A-Z])/_\l\1/g
G
s/(.*)\n(.*)\<[a-z]+([A-Z][a-z]+)+\>(.*)/\2\1\4/
b loop
}
:循环
/.*\.*/ {
H
s/\1/
s/([A-Z])/\ul\1/g
G
s/(.*)\n(.*)\(.*)/\2\1\4/
b环
}
这里,\
匹配一个dromedaryCase术语\
是单词边界,以确保这仅与此类术语匹配。因此,在一个循环中:
/
重用最后一个正则表达式的事实,即1中的正则表达式。
后接小写字母(这使用GNU扩展名\l
;否则需要y/ABCDEF…/ABCDEF…/
命令来更改大小写)。模式空间现在包含与单峰驼案例术语对应的蛇案例\1
是snake\u case术语,\2
是替换部分之前的原始行部分,\4
是dromedaryCaseTerm之后的部分。然后按照正确的顺序重新组装这些零件如果你认为这不值得付出努力:不管你想做什么,已经有了一个py包,这难道不令人难过吗?@jornsharpe不清楚autopep8是否检测到了N*错误。你能引用一个文档或一些示例代码吗?更新:autopep8不会修复命名冲突。它使用pep8模块,该模块本身仅检测以下违规行为:。免责声明(页面顶部)特别声明不处理命名约定。对于我见过的最复杂的sed表达式,这是一个很好的解释。我甚至不知道在sed中循环是可能的。autopep8似乎是一条路要走,但我对sed和正则表达式的极限有点好奇。有证据表明sed是图灵完全的。不那么深奥的是,GNU sed可以调用任意shell命令,所以…是的,功能强大。但在某些时候,你需要考虑其他的选择,这一点在达到这个复杂程度之前就已经很好了。