python - 正则表达式 (vim) 用于 print ... to print(...) 用于 python2 到 python3

标签 python regex python-2.7 vim python-3.3

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/

相关文章:

python - pandas - 如何按行索引访问数据框中的行

python - 如何正确地将 python 捆绑安装到 Windows 用户

python - 在 Python 中选择文本文件的第一部分

java - 仅 0 或任何不以 0 开头的数字的正则表达式

python - 没有尾部斜杠的 Django URL 不起作用

python - 从 Matlab 和 Python 中获取的特征向量的符号差异

python - 在命令期间将日志记录重定向到控制台

python - 如何在python3中对字典元素进行分组

python - 如何从 Python 列表中删除日期

regex - 在映射文件中对多列使用 ReplaceTextWithMapping