我有一个 pacfile,我正在尝试更新它并且需要删除两个字符串之间的内容;应保留字符串本身:

 // OFFICE 365 DIRECT ACCESS


// END OFFICE 365 DIRECT ACCESS

例子:
// OFFICE 365 DIRECT ACCESS
  if (isInNet(hostip, "23.103.132.0","255.255.252.0") ||    //EOP
  isInNet(hostip, "23.103.136.0","255.255.248.0") ||    //EOP
  isInNet(hostip, "23.103.144.0","255.255.240.0") ||    //EOP
  isInNet(hostip, "23.103.191.0","255.255.255.0") ||    //EOP
// END OFFICE 365 DIRECT ACCESS

我想删除顶线和底线之间的线
$Pacfile = Get-ChildItem .\o365.pac | Get-Content -Raw
$startstring= " \/\/ OFFICE 365 DIRECT ACCESS(.*? )\/\/END OFFICE 365 DIRECT ACCESS"
$NewPacfile = [regex]::match($Pacfile, $startstring).Groups[1].value
$NewPacfile

最佳答案

$regex=@'
(?ms)^(\s*// OFFICE 365 DIRECT ACCESS\s*?\r?\n).*?\r?\n(\s*// END OFFICE 365 DIRECT ACCESS\s*)
'@
(Get-Content -Raw .\o365.pac) -replace $regex, '$1$2'
  • -replace $regex, '$1$2' 将正则表达式匹配的内容替换为其中第一个( $1 )和第二个捕获组( $2 )(带括号的子表达式, (...) )匹配的内容。
    在这里,这些捕获组捕获包含感兴趣范围的字符串。
  • (?ms) 为正则表达式设置 m 多行和 s 单行选项:
  • m 意味着 ^$ 应该匹配每行的开头和结尾,而不是整个输入字符串。
  • s 意味着元字符 . 也应该匹配 \n 字符,这样像 .* 这样的表达式可以用于跨行匹配。
  • \r?\n 匹配单个换行符,包括 CRLF 和 LF 变体。
  • .*? 匹配要删除的部分;请注意 ? 之后的非贪婪修饰符 ( .* ),它确保匹配结束字符串的下一次出现。
  • 关于powershell - 删除两行之间的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44950054/

    10-12 21:06