【问题标题】:Powershell replace text in a field from import-csvPowershell 从 import-csv 替换字段中的文本
【发布时间】:2018-04-12 19:37:22
【问题描述】:

我正在通过Import-CSV 读取一个大型 csv 文件,并且有一列数据格式如下; v00001048、v00019045 或 v0036905。我想在 v 之后但在任何数字之前而不是零之前替换所有零(0),所以上面的文字变成了; v-1048、v-19045 或 v-36905。进行了大量搜索但没有成功的结果。

【问题讨论】:

    标签: powershell import-csv


    【解决方案1】:

    如果您有一个包含如下数据的 CSV(例如“data.csv”):

    Property1,Property2,Property3
    SomeText,MoreText,v00001048
    

    然后您可以使用此技术替换 Property3 中的前导零:

    $data = Import-csv .\data.csv 
    
    $data | 
        ForEach-Object {
            $_.Property3 = $_.Property3 -replace "(?<=v)0+(?=\d+)","-"
        }
    

    如果该属性没有任何前导零开头(例如v1048),它将保持不变。如果您仍然希望它插入“-”,则将正则表达式模式更改为:

    "(?<=v)0*(?=\d+)"
    

    【讨论】:

    • 如果你没有标题,你可以这样做 Import-Csv .\data.csv -Header A,B,C 然后使用 $_.C 而不是 $_.Property3
    • 效果很好,除非值是 v0047003,它已更改为 v-47-3。我需要在第二个“-”上保留所有零。
    • 奇数。不为我这样做。 v0047003 按预期变为 v-47003。
    • @boxdog ,这里也一样,我也得到了v-47003 预期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2017-10-19
    • 1970-01-01
    相关资源
    最近更新 更多