首页 > 解决方案 > 使用 PowerShell 根据前 n 个字符删除重复项

问题描述

我有一个 CSV 文件,内容如下:

类型值
报价 这是第一个报价
引用 这是第一个引用!
报价 这是第一个报价?
报价 短报价
报价 短报价!
引用 这是一个明显更长的第三个引用
报价 这是一个明显更长的第三个报价。

我试图弄清楚如何识别报价的第一个唯一实例并删除重复。重复字符串末尾的无关字符是已知的,但字符串的长度可能从几个字符到超过 40 个字符不等。

标签: powershell

解决方案


如果您只想忽略尾随标点符号来确定唯一值,您可以按自定义属性对记录进行分组,然后像这样处理组:

Import-Csv 'C:\path\to\input.csv' |
    Group-Object { $_.VALUE -replace '[\.!\?]+$' } |
    ForEach-Object {
        $_.Group |
            Sort-Object Length -Descending |
            Select-Object -Last 1
    }

或者,用计算的属性替换原始VALUE属性并选择唯一记录:

Import-Csv 'C:\path\to\input.csv' |
    Select-Object TYPE, @{n='VALUE';e={$_.VALUE -replace '[\.!\?]+$'} -Unique

要从每个值的末尾删除任何标点符号,您还可以使用转义序列\p{P}而不是 character class [\.!\?],正如 Theo 在评论中提到的那样。


推荐阅读