我有以下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
3条答案
按热度按时间g2ieeal71#
您可以区分空格字符串的 * 前缀 * 不是分号或空格的情况,以及空格字符串的 * 后缀 * 不是分号或空格的情况。
为此,您可以使用环视:
查找内容:
\h+(?![;\s])|(?<![;\s])\h+
替换为:(空的)
·正则表达式
全部替换
说明
\h
匹配水平空白字符(因此不是换行符)(?![;\s])
是一个负的前瞻:当前位置后面的字符不应该是这些字符中的一个,但是它们不包括在整个匹配中。(?<![;\s])
是一个负面的后向视图:当前位置前面的字符不应是这些字符之一,但它们不包括在整个匹配中。camsedfj2#
(?:;|\G(?!^))\K\h*([^\s;]+)\h*(?=[^;]*;)
$1
***滴答***回绕 *
***SELECT***正则表达式 *
说明:
屏幕截图(之前):
屏幕截图(之后):
4ngedf3f3#
回答我的最后一个问题
可以通过用圆括号(圆括号)将其括起来来捕获一个组,每个组将从1开始计数,因此可以通过在数字前面加上美元来使用它们。
在查找框中:
在替换框中
说明:
第1组-([a-zA-Z 0 -9])
第2组-([ ]{1,})
第3组-([;])
1美元3美元