PowerShell 中带有嵌入式双引号的正则表达式模式

Regex pattern with embedded double quotes in PowerShell

需要使用 PowerShell 在文档中搜索以下关键字:

["Allowed Acquisition Clean-Up Period" 
$keyword = ""
Get-Content $SourceFileName | Select-String -Pattern $keyword

我正在搜索的字符串中有双引号,所以我正在努力如何在这个 $keyword 中提及。

显然你不仅有双引号,还有一个左方括号。方括号是正则表达式中的元字符(用于定义字符类),所以你也需要转义它们。

用单引号定义表达式:

$keyword = '\["Allowed Acquisition Clean-Up Period"'

或使用反引号转义嵌套双引号:

$keyword = "\[`"Allowed Acquisition Clean-Up Period`""

,其中包含正确解法:

鉴于 " 不是正则表达式元字符(在正则表达式中没有特殊含义),您的问题归结为:
如何在 PowerShell 中的字符串中嵌入 "(双引号)?.

  • 顺便说一句:如前所述,[ 正则表达式元字符,因此必须在正则表达式中将其转义为 \[ 才能成为被视为 文字 。作为 TheIncorrigible1 points out, you can let [regex]::Escape($string) 为您处理转义;结果在正则表达式的上下文中按字面意思处理 $string 的内容。

有几个选项,此处使用简化的示例字符串 3 " of rain - 另请参阅:Get-Help about_Quoting_Rules:

# Inside a *literal string* ('...'):
# The content of single-quoted strings is treated *literally*.
# Double quotes can be embedded as-is.
'3 " of rain'

# Inside an *expandable string* ("..."):
# Such double-quoted strings are subject to *expansion* (interpolation)
# of embedded variable references ("$var") and expressions ("$(Get-Date)")
# Use `" inside double quotes; ` is PowerShell's escape character.
"3 `" of rain"                                                                                 #"
# Inside "...", "" works too.
"3 "" of rain"

# Inside a *literal here-string* (multiline; end delimiter MUST be 
# at the very beginning of a line):
# " can be embedded as-is.
@'
3 " of rain
'@

# Inside an *expanding here-string*:
# " can be embedded as-is, too.
@"
3 " of rain
"@

为了完整起见:您可以通过其 Unicode 代码点(标识每个字符的数字)创建双引号,即 0x22(十六进制) / 34(十进制),将其转换为 [char],例如:[char] 0x22.
你可以使用这个:

  • 字符串连接中'3 ' + [char] 0x22 + ' of rain'
  • 中使用 -f 运算符 的字符串格式化表达式:'3 {0} of rain' -f [char] 0x22