Regex 删除空白时不应删除某些句子之间的空格。请使用powershell 情况:

Regex 删除空白时不应删除某些句子之间的空格。请使用powershell 情况:,regex,powershell,Regex,Powershell,我必须从文件中删除特殊字符和空格。不应删除句子引号之间的空格。只需删除字符串前面和后面的空格 输入: 我将输入作为文本格式保存在{} {" fakldjfqllewfllwefklwdkf wefw " ,XCSLDKVNADUFHef328E498234750139458YefA88787 ,"&*%&*^*&^()*)(*(*T&*UKLKJGYTDUJ:" ,LMKCXXBJIUY&*(efewfqerfqer

我必须从文件中删除特殊字符和空格。不应删除句子引号之间的空格。只需删除字符串前面和后面的空格

输入: 我将输入作为文本格式保存在
{}

{" fakldjfqllewfllwefklwdkf wefw "  ,XCSLDKVNADUFHef328E498234750139458YefA88787     ,"&*%&*^*&^()*)(*(*T&*UKLKJGYTDUJ:"                ,LMKCXXBJIUY&*(efewfqerfqerrferrferfeffgfadfgafegkEJFGI} 
{"fakldjfqllewfllwefklwdkfwefw",XCSLDKVNADUFHef328E498234750139458YefA88787,"TUKLKJGYTDUJ",LMKCXXBJIUYefewfqerfqerrferrferfeffgfadfgafegkEJFGI}
我试图解决此问题的Powershellcode: 输出: 我将输出作为文本格式保存在
{}

{" fakldjfqllewfllwefklwdkf wefw "  ,XCSLDKVNADUFHef328E498234750139458YefA88787     ,"&*%&*^*&^()*)(*(*T&*UKLKJGYTDUJ:"                ,LMKCXXBJIUY&*(efewfqerfqerrferrferfeffgfadfgafegkEJFGI} 
{"fakldjfqllewfllwefklwdkfwefw",XCSLDKVNADUFHef328E498234750139458YefA88787,"TUKLKJGYTDUJ",LMKCXXBJIUYefewfqerfqerrferrferfeffgfadfgafegkEJFGI}
预期产出: 问题:
问题是,代码本身也删除了字符串中的空格,我只希望删除前导空格和尾随空格。

嗯,这确实是一个奇怪的字符串。。 无论如何,这可能对你有好处:

$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
$text='{“fakldjfqllewfllwefklwdkf wefw”,xcsldkvnaudfhef328e4923470139458yefa88787,&*%&*%&*^^*&^()(*(*T&*UKLKJGYTDUJ:”,LMKCXXBJIUY&*(efewfqerfqerrferferfeffadfgafegjfgi})
#首先拆下外部的卷曲支架并修剪剩下的部分
$text=$text-creplace'^\{\s*\\s*\}$',''
#此正则表达式将拆分逗号分隔的可选带引号字符串列表。
#它处理带引号的分隔符(“”)和转义引号(\“”)。
#引号内的空格被保留,引号外的空格被销毁。

$regex='(?m)\s*,\s*(?!)请发布实际输出(作为文本),而不是截图来剪切字符串的尾随和前导空格,只需像这样使用
Trim
$string.Trim(“”
)。我的实际输入是{“fakldjfklewfllwefklwdkf wefw”,xcsldkvnaudfh328e498234750139458yefa88787,&*%&&*^*&&&**)(*(*T&*UKLKJGYTDUJ:,LMKCXXBJIUY&*(efewfqerfqerrferfeffgfadfgafegkejfgi}@MathiasR.Jessen一旦查看了我发布的帖子,请检查一下,看看你是否能提供帮助me@Paxz$String.Trim(“”)如果整个字符串都在双引号之间,但我的字符串大小写不同,那么这将起作用 {"fakldjfqllewfllwefklwdkf wefw",XCSLD;KVNADUFHef328E498234750139458YefA88787,"&*%&*^*&^()*)(*(*T&*UKLKJGYTDUJ:",LMKCXXBJIUY&*(efewfqerfqerrferrferfeffgfadfgafegkEJFGI}