仅当CSV值不为空时,才使用Notepad++修剪CSV值

2eafrhcq  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(172)

我有以下CSV:

COLUMN_A;COLUMN_B;COLUMN_C;COLUMN_D;COLUMN_E;COLUMN_F;COLUMN_G;COLUMN_H;COLUMN_I;COLUMN_L;
01234;AB ;00001; ;100000001;   ;ABC;+0000000000099998,080;XYZ        ;

我想只在值不为空时删除白色。所以结果将是这样的:

COLUMN_A;COLUMN_B;COLUMN_C;COLUMN_D;COLUMN_E;COLUMN_F;COLUMN_G;COLUMN_H;COLUMN_I;COLUMN_L;
01234;AB;00001; ;100000001;   ;ABC;+0000000000099998,080;XYZ;

我知道我可以使用find ' ' replace '',这样空格就不会被替换。但是这样,我会删除所有空格,并且我希望在没有任何其他字符的地方保留空格。
如果我必须使用正则表达式(我的第一次),我想我需要连接以下表达式:

[a-zA-Z]
[\s]
[;]

所以我可以使用[a-zA-Z][\s][;]在查找框中,
但我不知道如何用[a-zA-Z][;]

更新

回答@Trincot是正确的,但如果其中一列包含带有空格的描述,则这些描述将被删除
此COLUMN_A;列B;列C; 01234;AB;我叫保罗;
将变成:列_A;列_B;数据类型米纳斯·保罗;
因此,我更喜欢捕获最后一个字符、白色和分号

([a-zA-Z0-9])([ ]{1,})([;])

并用第一组和最后一组替换

$1$3
g2ieeal7

g2ieeal71#

您可以区分空格字符串的 * 前缀 * 不是分号或空格的情况,以及空格字符串的 * 后缀 * 不是分号或空格的情况。
为此,您可以使用环视:
查找内容:\h+(?![;\s])|(?<![;\s])\h+
替换为:(空的)
·正则表达式
全部替换

说明

  • \h匹配水平空白字符(因此不是换行符)
  • (?![;\s])是一个负的前瞻:当前位置后面的字符不应该是这些字符中的一个,但是它们不包括在整个匹配中。
  • (?<![;\s])是一个负面的后向视图:当前位置前面的字符不应是这些字符之一,但它们不包括在整个匹配中。
camsedfj

camsedfj2#

  • 按Ctrl+H组合键
  • 查找内容:(?:;|\G(?!^))\K\h*([^\s;]+)\h*(?=[^;]*;)
  • 替换为:$1
    ***滴答***回绕 *
    ***SELECT***正则表达式 *
  • 全部替换
    说明:
(?:             # non capture group
    ;               # semi-colon
  |               # OR
    \G              # restart from last match position
    (?!^)           # not the beginning of line
)               # end group
\K              # forget all we have seen until this position
\h*             # 0 or more horizontal spaces
(               # group 1
    [^\s;]+         # 1 or more any character that is not a space or semi-colon
)               # end group
\h*             # 0 or more horizontal spaces
(?=             # positive lookahead, make sure we have after:
    [^;]*           # 0 or more any character that is not a semi-colon
    ;               # a semi-colon
)               # end lookahead

屏幕截图(之前):

屏幕截图(之后):

4ngedf3f

4ngedf3f3#

回答我的最后一个问题
可以通过用圆括号(圆括号)将其括起来来捕获一个组,每个组将从1开始计数,因此可以通过在数字前面加上美元来使用它们。
在查找框中:

([a-zA-Z0-9])([ ]{1,})([;])

在替换框中

$1$3

说明:
第1组-([a-zA-Z 0 -9])

  • 捕获包含字母(小写或大写)或数字的字符

第2组-([ ]{1,})

  • 捕获1个或多白色

第3组-([;])

  • 捕获分号字符。

1美元3美元

  • 使用捕获的组1和组3。

相关问题