如何在VBA宏中使用regexp解析Excel的单元格字符串

时间:2015-08-12 16:35:23

标签: regex string excel vba excel-vba

我在Excel 2010中编写宏以删除列的多个单元格中的换行符。 实际上,我有5个案例,我必须在单元格中搜索。 我按如下方式列举它们:

  1. 如果有一个点或逗号后跟一个空格,然后是一个换行符(\ n),请用点或逗号替换它(无论它在应用regexp之前是什么)后跟一个空格
  2. 如果有一个字符后跟空格然后换行,请将其替换为字符和空格
  3. 如果后面有换行符,请将其替换为字符+空格
  4. 如果有一个字符后跟两个空格然后换行,请将其替换为字符+空格
  5. 如果该行的末尾有一个点,请保留它,因为它是一个完成点。
  6. 正如你所看到的,2和3非常相似,所以我认为正则表达式可能类似[a-zA-Z0-9]\n但我不知道......首先,如果它是正确的搜索刚刚添加\ n和\ n秒的换行符,如何搜索空格。在检测到正则表达式之后,我认为可以用单个.Replace(Text,"regexp","regexp ")来解决,其中结束空白空间来自形式" char" +" "
    所以基本上我的问题是,这种模式的正则表达式是什么? 在第五种情况下,我如何搜索行终止符,以便它不会尝试在一个段落的最后一个点之后搜索换行符。
    我可以将Chr(10)用于换行,将Chr(32)用于空间吗?
    顺便说一下,我一直在关注这些参考文献:
    How to use RegExp
    VBA Split strings

1 个答案:

答案 0 :(得分:3)

此模式将找到任意字母数字字符.,,后跟可选空格,然后换行,并将其替换为匹配的结束字符,后跟一个空格。

Dim re
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "([\w.,])\s*\n"
strText = re.Replace(strText, "$1 ")

测试输出。忽略括号。他们只是在那里展示空间。

[the end.]     = [the end.]
[the end.\n]   = [the end. ]
[the end. \n]  = [the end. ]
[the end.  \n] = [the end. ]
[the end,]     = [the end,]
[the end,\n]   = [the end, ]
[the end, \n]  = [the end, ]
[the end,  \n] = [the end, ]
[the end]      = [the end]
[the end\n]    = [the end ]
[the end \n]   = [the end ]
[the end  \n]  = [the end ]