这post仅当打印命令中有字符串时才有用。 现在我有大量的源代码,其中包含一条声明,例如
print milk,butter
应该格式化为
print(milk,butter)
用\n 捕获行尾并不成功。有什么提示吗?
最佳答案
我不熟悉 2to3,但从所有评论来看,它看起来是完成这项工作的正确工具。
也就是说,也许我们可以以此问题为借口来学习一些 vim 基础知识的简短类(class)。
首先,您需要一个与正确行相匹配的模式。我认为 ^\s*print\>
可以:
^
匹配行首($
匹配行尾)。\s
匹配空格(空格或制表符)*
表示前一个原子的 0 个或多个(尽可能多,或“贪心”)。print
是文字串。\>
匹配词尾(零宽度)。您可以改用(文字)空格或\s\+
。
接下来,您需要确定要用括号括起来的部分。由于 *
是贪心的,.*
将匹配到行尾;无需将其固定在右侧。使用 \(\s*print\)
和 \(.*\)
捕获片段,以便您可以将它们称为 \1
和 \2
替换。
现在,将各个部分组合起来。有很多变体,我还没有尝试过“高尔夫”这个:
:%s/^\(\s*print\)\s\+\(.*\)/\1(\2)
有些人更喜欢“非常神奇”的版本,其中只有 a-z、A-Z、0-9 和 _ 被视为文字字符;那么你不需要转义括号和加号:
:%s/^\v(\s*print)\s+(.*)/\1(\2)
关于python - 正则表达式 (vim) 用于 print ... to print(...) 用于 python2 到 python3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22590183/