Python 多行替换

Python Multiline Replace

我正在尝试通过 Windows RM 获取 python 到 运行 的 PowerShell 脚本,因为编码我将参数注入文件的顶部,但是这意味着我需要删除现有的 Param 函数,我几乎设法让正则表达式工作,但有时出现的“参数(强制)”部分弄乱了我的正则表达式,有人可以帮我修复它吗。

我不希望它与脚本中其他地方可能存在的单词 Param 相匹配。

......
Param(
    [Parameter(Mandatory)]
    [String]$TaskName,
    [Switch]$Debug = $false
)

# Debug
if ($Debug)

Python 2.7 命令:

args = re.sub("Param(\s*\r*\n[^)]+)", "", scriptfile.read(), re.M )

您可以使用

(?sm)^\s*Param\(.*?\)$

regex demo。此模式假定 ) 右侧匹配边界位于一行的末尾,并且 Param 内部行不能以 ) 字符结尾。

详情:

  • (?sm) - re.Sre.M 选项已启用
  • ^ - 行首
  • \s* - 零个或多个空格
  • Param\( - Param( 字符串
  • .*? - 尽可能少的任何零个或多个字符
  • \) - 一个 ) 字符
  • $ - 行尾

参见 Python demo:

import re
test_str = "Param(\n    [Parameter(Mandatory)]\n    [String]$TaskName,\n    [Switch]$Debug = $false\n)\n\n# Debug\nif ($Debug)\n\nParam(...)"
print (re.sub(r"^\s*Param\(.*?\)$", '', test_str, 0, re.M|re.S))

输出是


# Debug
if ($Debug)