首页 > 解决方案 > 删除空格时不应删除某些句子之间的空格。使用powershell

问题描述

情况:

我必须从文件中删除特殊字符和空格。不应删除句子引号之间的空格。仅需要删除字符串前导和字符串尾随的空格。

输入:

我将我的输入保持为介于两者之间的文本格式{}

{" fakldjfqllewfllwefklwdkf wefw "  ,XCSLDKVNADUFHef328E498234750139458YefA88787     ,"&*%&*^*&^()*)(*(*T&*UKLKJGYTDUJ:"                ,LMKCXXBJIUY&*(efewfqerfqerrferrferfeffgfadfgafegkEJFGI} 

我试图解决这个问题的 Powershellcode:

$objFile1 = Get-Content "D:\my-training\powershell\Sample_file.csv"

foreach($line in $objFile1)
{
  $String = "$line"
  $value= $String -replace '[^\p{L}\p{Nd}/"/,]', ''
  Add-Content -path "D:\my-training\powershell\result.csv" -value $value 
}

输出:

我将输出保持为介于两者之间的文本格式{}

{"fakldjfqllewfllwefklwdkfwefw",XCSLDKVNADUFHef328E498234750139458YefA88787,"TUKLKJGYTDUJ",LMKCXXBJIUYefewfqerfqerrferrferfeffgfadfgafegkEJFGI}

预期输出:

{"fakldjfqllewfllwefklwdkf  wefw",XCSLDKVNADUFHef328E498234750139458YefA88787,"TUKLKJGYTDUJ",LMKCXXBJIUYefewfqerfqerrferrferfeffgfadfgafegkEJFGI}

问题:

问题是,代码还删除了字符串本身中的空格,我只希望删除前导和尾随空格。

标签: regexpowershell

解决方案


好吧,这肯定是一个看起来很奇怪的字符串。无论如何,这可能对你有用:

$text = '{" fakldjfqllewfllwefklwdkf wefw "  ,XCSLDKVNADUFHef328E498234750139458YefA88787     ,"&*%&*^*&^()*)(*(*T&*UKLKJGYTDUJ:"                ,LMKCXXBJIUY&*(efewfqerfqerrferrferfeffgfadfgafegkEJFGI}'

# first remove the outer curly brackets and trim what is left
$text = $text -creplace '^\{\s*|\s*\}$', ''

# This regex will split comma separated lists of optionally quoted strings.
# It handles quoted delimiters ("") and escaped quotes(\"). 
# Whitespace inside quotes is preserved, outside is destroyed.
$regex = '(?m)\s*,\s*(?!(?<=(?:^|,)\s*"(?:[^"]|""|\\")*,\s*)(?:[^"]|""|\\")*"\s*(?:,|$))'
$parts = $text -split $regex

# output the text with whitespaces trimmed for strings within quotes
# enclose the whole thing again in curly brackets.
'{{{0}}}' -f 
(($parts | ForEach-Object {
    if ($_ -cmatch '^".*"$') {               # if the string is quoted
        $_ -creplace '^"\s*|\s*"$', '"'      # remove the whitespaces left and right of the actual string
    }
    else { $_ }                              # unquoted strings can pass as-is
}) -join ',')                                # join the parts with the comma as delimiter

输出

{"fakldjfqllewfllwefklwdkf wefw",XCSLD;KVNADUFHef328E498234750139458YefA88787,"&*%&*^*&^()*)(*(*T&*UKLKJGYTDUJ:",LMKCXXBJIUY&*(efewfqerfqerrferrferfeffgfadfGIFgafe}

推荐阅读