我如何用Python正则表达式在每一行匹配的地方加上一对圆括号?

e37o9pze  于 2022-12-25  发布在  Python
关注(0)|答案(1)|浏览(133)

我正在尝试转换以下代码

print "*** Dictionaries"
dictionaries = json.loads(api.getDictionaries())
print dictionaries
...
print(bestMatch)
...

print("*** Dictionaries")
dictionaries = json.loads(api.getDictionaries())
print(dictionaries)
...
print(bestMatch)
...

也就是说,在每一行print上放置一对括号。
下面是我的代码

import re

with open('p2code.txt') as f:
  lines = [line.rstrip() for line in f]

cmplr = re.compile(r'(?<=print).*')

p3code = []

for line in lines:
  p3line = line
  m = cmplr.search(line)
  if m:
    p3line = 'print(' + m.group(0) + ')'
  p3code.append(p3line)

with open('p3code.txt', 'w') as f:
  for line in p3code:
    f.write(f"{line}\n")

有2个问题与上面的代码有关。
是否有更优雅的替换方式,例如cmplr.sub?如果有,我该如何做?
print行中的一行已经将括号

print(bestMatch)

如何使代码跳过这一行,避免出现类似

print((bestMatch))

The idea/need comes from Cambridge's API doc https://dictionary-api.cambridge.org/api/resources#python

ccrfmcuu

ccrfmcuu1#

您可以在命令行中使用sed的单个命令来完成此操作。

sed -i -E 's/print ([^\(].*[^\)])/print\(\1\)/g' code.py

这是最小的,也是最简单的,但是如果你坚持使用python,你可以使用以下方法:

re.sub("print ([^\(].*[^\)])", r"print($\1)", lineOfFile)

您可以进一步使用正则表达式here

相关问题