如何使用正则表达式来识别不同行上大括号之间的错误?

How can I use a regex expression to identify the falses between braces on different lines?

我正在尝试使用 Python re.sub 模块将下面示例中的任何 false 实例替换为“false, \n”

local Mission = {

    start_done = false
    game_over = false

} --End Mission

我尝试了以下操作,但没有成功替换。这个想法是我以锚字符串开始和结束,跳过任何不是“false”的东西,当我得到匹配时 return “false + ','”。如有任何帮助,我们将不胜感激!

re.sub(r'(Mission = {)(.+?)(false)(.+?)(} --End Mission)', r'' + ',' + '\n')

您可以使用

re.sub(r'Mission = {.*?} --End Mission', lambda x: x.group().replace('false', 'false, \n'), text, flags=re.S)

参见regex demo

备注:

  • Mission = {.*?} --End Mission 正则表达式匹配 Mission = {,然后是任意零个或多个字符,然后是 } --End Mission
  • 然后 false 在匹配的文本中被替换为 false, \n

Python demo

import re
text = 'local Mission = {\n    start_done = false\n    game_over = false\n\n} --End Mission'
rx = r'Mission = {.*?} --End Mission'
print(re.sub(rx, lambda x: x.group().replace('false', 'false, \n'), text, flags=re.S))

另一个没有正则表达式的选项:

your_string = 'local Mission = {\n    start_done = false\n    game_over = false\n\n} --End Mission'
print(your_string.replace(' = false\n', ' = false,\n'))

输出:

local Mission = {
    start_done = false,
    game_over = false,

} --End Mission

前提是每个以 = \n 开头的“假”字符串必须被替换,然后这里是一个正则表达式:

re.sub(r'= (false)\n', r'= ,\n', text)

注意:您在正则表达式中引入了 5 个组,因此您应该使用 </code> 而不是 <code> 来表示“false”,组从 1 开始,请参阅 doc段落 \number