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
需要使用 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