regex - 删除空格时不应删除某些句子之间的空格。使用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}
问题:
问题是,代码还删除了字符串本身中的空格,我只希望删除前导和尾随空格。
解决方案
好吧,这肯定是一个看起来很奇怪的字符串。无论如何,这可能对你有用:
$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}
推荐阅读
- sql - 在 nvarchar 参数中查找包含分隔词的行
- jquery - 调用 JQuery UI 小部件超级功能的正确方法?
- python - 将值列添加到 pandas DataFrame
- shared-libraries - bazel cc_binary() 创建没有任何符号的.so 文件?
- r - 按年份划分的小提琴情节
- ios - 快速获取 ImageView 的当前位置
- jquery - 如何在程序生成的跨度中添加空格?
- javascript - 读取 DataContext 对象的数据
- javascript - jQuery:文本并在单击时禁用它
- python-3.x - 通过其中一个键在数组中搜索字典元素