我正在研究一个 powershell 脚本,将文件解析为不同的分隔格式,可以轻松加载到 Excel 或 DB 中。
除了查找和替换字符串“~S~|”之外,我基本上已经知道了 其中所有字符都应按字面意思理解。
我试过以下无济于事:“\~S\~\|” “~S~\|” “~S~|” <-- 这个是松鼠,因为 | 是或在 RegEx 领域
任何的意见都将会有帮助。
我正在研究一个 powershell 脚本,将文件解析为不同的分隔格式,可以轻松加载到 Excel 或 DB 中。
除了查找和替换字符串“~S~|”之外,我基本上已经知道了 其中所有字符都应按字面意思理解。
我试过以下无济于事:“\~S\~\|” “~S~\|” “~S~|” <-- 这个是松鼠,因为 | 是或在 RegEx 领域
任何的意见都将会有帮助。
regex.escape 方法是为这种你不知道哪些字符被认为是特殊字符(元字符)的情况而设计的。
PS> [regex]::escape("~S~|")
~S~\|
您可以看到唯一的元字符是管道符号(例如“|”),并且转义方法为您转义了它(在它前面添加了一个反斜杠)。
PS> "this~S~|is~S~|a~S~|dog" -replace [regex]::escape('~S~|')
thisisadog
你能试试这个:
$string = "this~S~|is~S~|a~S~|dog"
$string -replace '~S~\|',' '
我能够通过解决这个问题来解决这个问题。感谢您的所有输入,所有答案都按照您的描述工作。
为了让我让它在一个非常长的字符串中工作,并带有多个“查找”值的实例,我最终不得不在字符串增长时构建它。
例如:
$tString = $_
$tString = $tString -replace 'Name:', ''
$tString = $tString -replace 'Id:', ''
$tString = $tString -replace 'Administrative group:', ''
$tString = $tString -replace 'Administrative class\(es\):', ''
$tString = $tString -replace 'Primary group:', ''
$tString = $tString -replace 'Session group:', ''
$tString = $tString -replace '~S~([^-]+)\|', '$1|'
$tString = $tString -replace ';\|', ';'
return $tString