有关背景信息,请查看this SO post。
完整的脚本:
(get-content file.txt -ReadCount 0) -replace '([^,]")"','$1' |
set-content newfile.txt
我特意在脚本的这一部分中寻找逻辑的翻译:
'([^,]")"','$1' |
有人可以解释一下逻辑/语法,还是指出我正确的方向?
答案 0 :(得分:3)
'([^,]")"'
是一个正则表达式,匹配除逗号后跟两个连续双引号的任何字符。括号分组第一个字符和第一个双引号。
'$1'
是对匹配中组的反向引用,在替换中意味着“仅用第一组替换匹配”,例如在字符串foo""bar
中,序列o""
将仅替换为o"
,从而删除第二个双引号。
|
是一个管道,可将替换结果提供给管道中的下一个cmdlet(Set-Content newfile.txt
)。
答案 1 :(得分:2)
'([^,]")"','$1'
让我们将其分为正则表达式'([^,]")"'
和替换文本'$1'
两部分。正则表达式模式中的()
创建一个未命名的捕获组,通过$1
在替换文本中引用,即它是第一个(并且仅在此情况下)一组parens。什么是匹配&在此捕获组中捕获的是除逗号之后的任何字符,后跟双引号,后面还有捕获组之外的另一个双引号。因此,它会删除两个连续双引号中的一个,除非第一个以逗号开头。
答案 2 :(得分:1)