需要使用PowerShell在文档上搜索以下关键字:
["Allowed Acquisition Clean-Up Period"
$keyword = ""
Get-Content $SourceFileName | Select-String -Pattern $keyword
我要搜索的字符串中有双引号,因此我在如何在此$keyword
中进行提及感到困惑。
答案 0 :(得分:3)
显然,您不仅有双引号,而且还有一个方括号。方括号是正则表达式中的元字符(用于定义字符类),因此您也需要转义这些字符。
用单引号定义表达式:
$keyword = '\["Allowed Acquisition Clean-Up Period"'
或使用反引号对嵌套的双引号进行转义:
$keyword = "\[`"Allowed Acquisition Clean-Up Period`""
答案 1 :(得分:2)
要补语 Ansgar Wiechers' helpful answer,其中包含正确的解决方案:
鉴于"
不是正则表达式元字符(在正则表达式中没有特殊含义),您的问题可以归结为:
如何在PowerShell的字符串中嵌入"
(双引号)?。
[
是regex元字符,因此必须将其\[
转义为正则表达式内的字符才能被视为文字。正如TheIncorrigible1所指出的那样,您可以让[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
(十六进制)/ {{1 }}(十进制),将其强制转换为34
,例如: [char]
。
您可以使用:
[char] 0x22
'3 ' + [char] 0x22 + ' of rain'
运算符在字符串格式表达式中:-f