使用Regex删除Excel中的空白和空行

  • Share This
Michael Brown

希望以最有效的方式处理空白处? 使用正则表达式删除单元格中的所有空格,用一个字符替换多个空格,只修剪数字之间的空格,等等。

无论你使用的是哪种输入数据,你几乎不会遇到没有空格的数据集。 在大多数情况下,空格是好的--你用它在视觉上分隔不同的信息,使其更容易被感知。 然而,在某些情况下,它可能成为邪恶的--额外的空格会弄乱你的公式,使你的工作表几乎无法管理。

    为什么在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)

    要想根据上述词条创建一个公式,这里有两个简单的步骤要执行。

    1. 关于 阿博比特数据 选项卡,在 文本 组,点击 Regex工具 .

    2. 关于 Regex工具 窗格,选择源数据,输入你的词组,选择 移除 选项,并点击 移除 .

      要获得公式而不是数值的结果,记得在 作为一个公式插入 复选框。

    稍后,你会看到 AblebitsRegexRemove 函数插入到原始数据右侧的新列中。

    另外,你也可以在某个单元格(比如A5)中输入搜索结果,然后直接在单元格中插入公式。 插入功能 对话框,其中 AblebitsRegexRemove 被归类为 AblebitsUDFs .

    由于这个函数是专门为删除字符串而设计的,它只需要两个参数--输入字符串和regex。

    =AblebitsRegexRemove(A5, $A$2)

    这就是如何在Excel中使用正则表达式去除空格的方法。 感谢你的阅读,并期待下周在我们的博客上见到你!

    可用的下载

    用regex去除空白 - 示例(.xlsm文件)

    终极套房 - 试用版 (.exe文件)

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.