Table of contents
希望以最有效的方式处理空白处? 使用正则表达式删除单元格中的所有空格,用一个字符替换多个空格,只修剪数字之间的空格,等等。
无论你使用的是哪种输入数据,你几乎不会遇到没有空格的数据集。 在大多数情况下,空格是好的--你用它在视觉上分隔不同的信息,使其更容易被感知。 然而,在某些情况下,它可能成为邪恶的--额外的空格会弄乱你的公式,使你的工作表几乎无法管理。
为什么在Excel中使用正则表达式来修剪空白处?
在我们深入探讨使用正则表达式去除Excel工作表中的空白之前,我想先谈谈首先想到的问题--既然Excel已经有了TRIM函数,我们为什么还要用正则表达式?
为了理解两者的区别,让我们看看在每种情况下什么被认为是空白的。
- 内置的TRIM函数只能将 空格字 在7位ASCII系统中的值为32。
- 正则表达式可以识别一些不同形式的空白,如空格( )、制表符(\t)、回车符(\r)和换行符(\n)。 此外,还有 白边字符 (匹配所有这些类型,对清理原始输入数据非常有帮助。
清楚地知道幕后发生了什么,制定解决方案就容易多了,对吗?
如何在Excel中启用正则表达式
众所周知,开箱即用的Excel不支持正则表达式。 要启用它们,你需要创建一个自定义的VBA函数。 幸运的是,我们已经有了一个,名为 正则替换 等等,为什么我们说的是删除,却用 "替换"? 在Excel语言中,"删除 "只是 "用空字符串替换 "的另一种说法 :)
要将该函数添加到你的Excel中,只需从本页复制其代码,将其粘贴到VBA编辑器中,并将你的文件保存为 支持宏的工作簿 (.xlsm)。
下面是该函数的语法,供你参考。
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])前三个参数是必须的,后两个参数是可选的。
在哪里?
- 文本 - 要搜索的原始字符串。
- 样式 - 要搜索的regex。
- 替换 - 要替换的文本。 要 移除 空白空间 ,你会把这个参数设置为:。
- 空字符串 (""),绝对修剪所有的空格
- 空间 特征 (" "),用一个空格字符替换多个空格。
- Instance_num (可选) - 实例编号。 在大多数情况下,你会省略它来替换所有实例(默认)。
- Match_case (可选) - 一个布尔值,表示是否匹配(TRUE)或忽略(FALSE)文本大小写。 对于空白处,它是不相关的,因此省略。
更多信息,请参见RegExpReplace函数。
如何用regex去除空格 - 例子
有了添加到工作簿中的 RegExpReplace 函数,让我们一次解决不同的情况。
使用regex删除所有的空白点
要删除一个字符串中的所有空格,你只需搜索任何空白字符,包括空格、制表符、回车符和换行符,然后用一个空字符串("")替换它们。
样式
替换 : ""
假设源字符串在A5中,B5中的公式是。
=RegExpReplace(A5, "\s+", "")
为了更容易管理你的模式,你可以在一个预定义的单元格中输入词组,并使用$A$2这样的绝对引用将其提供给公式,这样在向下复制公式时,单元格地址将保持不变。
=RegExpReplace(A5, $A$2, "")
删除一个以上的空白处
要删除 额外的留白 (即超过一个连续的空格),使用相同的regex /s+,但用一个空格字符替换找到的匹配。
样式
替换 : " "
=RegExpReplace(A5, "\s+", " ")
请注意,这个公式不仅在字与字之间保留一个空格,而且在字符串的开头和结尾也保留一个空格,这是不可取的。 为了摆脱前面和后面的空白,将上述公式嵌套到另一个剥离开头和结尾空格的RegExpReplace函数中去。
=RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+
删除前导和尾部空白的Regex
要搜索行首或行尾的空白处,请使用开始^和结束$的锚。
领先 空白。
样式 : ^[\s]+
追踪 空白。
样式 : [\s]+$
领先 和 蔓生 空白。
样式 : ^[\s]+
无论你选择哪种算法,都要把匹配的内容替换为空。
替换 : ""
例如,要消除A5中一个字符串开头和结尾的所有空格,其公式为:。
=RegExpReplace(A5, "^[\s]+
如下面的截图所示,这只是删除了前导和尾部的空白,字与字之间的空间保持不变,为读者的眼睛创造一个视觉上的愉悦。
删除多余的空白,但保留换行符
当处理多行字符串时,你可能希望去掉多余的空格,但保留换行符。 要做到这一点,可以搜索空格[ ]或空格和制表符[\t],而不是空白字符。 当你的源数据从其他来源(如文本编辑器)导入时,后一种模式就很方便。
在下面的数据集中,假设你希望修剪所有前导/后导的空格和所有除一个空格外的中间空格,保持多行完整。 为了完成这个任务,你需要两个不同的 RegExpReplace 函数。
第一个函数将多个空格替换成一个空格字符。
=RegExpReplace(A5, " +", " ")
另一个是将行首和行尾的空格剥离。
=RegExpReplace(A5, "^ +
只要将这两个函数嵌套到另一个函数中即可。
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +")
而且你会得到一个完美的结果。
用一个字符替换多个空格的Regex
如果你想删除一个字符串中的所有空格,并用一个特定的字符替换每组连续的空格,这就是你需要做的。
首先,使用这个词组来修剪前导和尾部的白点。
=RegExpReplace(A8, "^[\s]+
然后,将上述功能服务于 文本 另一个RegExpReplace的参数,该参数用您指定的字符(如连字符)替换一个或多个连续的空白点。
样式
替换 : -
假设源字符串在A8中,该公式是这样的。
=RegExpReplace(RegExpReplace(A8, "^[\s]+)
或者你可以在不同的单元格中输入模式和替换,如截图所示。
删除空行的Regex
这里有一个在一个单元格中有多行的用户经常问的问题:"我的单元格中有很多空行,除了翻阅每一个单元格并手动删除每一行之外,还有什么方法可以摆脱它们吗?" 答案是:很简单!在一个单元格中有多行的情况下,我们可以将其删除。
为了匹配从当前行开始^到下一行没有一个字符的空行,regex是。
样式 : ^\n
如果你的视觉空白行包含空格或制表符,请使用这个正则表达式。
样式 : ^[\t ]*\n
只要用这个公式用一个空的字符串来替换重码,所有的空行就会一下子消失!
=RegExpReplace(A5, $A$2, "")
用RegEx工具删除空白处
上面的例子只是展示了由正则表达式提供的一小部分美妙的可能性。 不幸的是,并不是所有的经典正则表达式的功能都可以在VBA中使用。
幸运的是,我们的终极套件所包含的RegEx工具不受这些限制,因为它们是由微软的.NET RegEx引擎处理的。 这让你可以构建VBA正则所不支持的更复杂的模式。 下面你会发现这样一个正则表达式的例子。
去除数字之间的空格的Regex
在一个字母数字字符串中,假设你希望只去除数字之间的空白,那么像 "A 1 2 B "这样的字符串就会变成 "A 12 B"。
为了匹配任意两个数字之间的空白,你可以使用以下变通方法。
样式 : (?<=d)\s+(?=\d)
要想根据上述词条创建一个公式,这里有两个简单的步骤要执行。
- 关于 阿博比特数据 选项卡,在 文本 组,点击 Regex工具 .
- 关于 Regex工具 窗格,选择源数据,输入你的词组,选择 移除 选项,并点击 移除 .
要获得公式而不是数值的结果,记得在 作为一个公式插入 复选框。
稍后,你会看到 AblebitsRegexRemove 函数插入到原始数据右侧的新列中。
另外,你也可以在某个单元格(比如A5)中输入搜索结果,然后直接在单元格中插入公式。 插入功能 对话框,其中 AblebitsRegexRemove 被归类为 AblebitsUDFs .
由于这个函数是专门为删除字符串而设计的,它只需要两个参数--输入字符串和regex。
=AblebitsRegexRemove(A5, $A$2)
这就是如何在Excel中使用正则表达式去除空格的方法。 感谢你的阅读,并期待下周在我们的博客上见到你!
可用的下载
用regex去除空白 - 示例(.xlsm文件)
终极套房 - 试用版 (.exe文件)