2

有关上下文,请查看SO 帖子。

完整脚本:

(get-content file.txt -ReadCount 0) -replace '([^,]")"','$1' | set-content newfile.txt

我专门在这部分脚本中寻找逻辑的翻译:

'([^,]")"','$1' |

有人可以解释逻辑/语法,还是指出正确的方向?

4

3 回答 3

3

'([^,]")"'是一个正则表达式,它匹配除逗号后跟两个连续双引号之外的任何字符。括号将第一个字符和第一个双引号组合在一起。

'$1'是对匹配中组的反向引用,它在替换中的意思是“仅用第一个组替换匹配”,例如,在字符串foo""bar中,序列o""将被替换为 just o",从而删除第二个双引号。

|是一个管道,它将替换结果馈送到管道中的下一个 cmdlet ( Set-Content newfile.txt)。

于 2013-10-29T17:21:31.777 回答
2
'([^,]")"','$1'

让我们把它分成两部分,正则表达式模式'([^,]")"'和替换文本'$1'。正()则表达式中的 模式创建了一个未命名的捕获组,它在替换文本中被引用,$1即它是第一个(并且仅在这种情况下)一组括号。在此捕获组中匹配和捕获的内容是除逗号后跟双引号外的任何字符,该双引号后跟捕获组之外的另一个双引号。因此,它消除了两个连续双引号中的一个,除非第一个双引号前面有逗号。

于 2013-10-29T17:22:49.310 回答
1

^ 符号匹配字符串的开头。这里这里
的很好 的参考资料很好地解释了一切。在此处 介绍 Power shell 中的正则表达式。

当 ^ 符号出现在括号 [] 中时,它将匹配任何不包括胡萝卜后面的内容

于 2013-10-29T17:12:15.210 回答