【问题标题】:Python Multiline ReplacePython多行替换
【发布时间】:2021-08-03 16:46:26
【问题描述】:

我试图让 python 在 Windows RM 上运行 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)

【问题讨论】:

  • 试试(?s)^\s*Param\(.*?\)$
  • 这似乎不起作用,我试图在此示例中删除整个 Param 部分(5 行),我确实希望它与行 ^Param 的开头相匹配,但是这在示例中破坏了我的正则表达式
  • herehere
  • 完美的工作,这是我的错,我在没有 r 的情况下调用 re.sub 并且标志位置错误,抱歉,一直在使用 PHP/BASH 我仍然习惯蟒蛇

标签: python regex python-2.7


【解决方案1】:

你可以使用

(?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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2011-02-07
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多