识别字符串中的数字并替换 - VBA

时间:2017-05-04 12:03:11

标签: excel vba excel-vba

我需要用:(冒号空格)替换所有(冒号)。我能用替换功能做到这一点。

description_string = Replace(currentSheet.Cells(i, j), ":", ": ")

但这也取代了时间格式(例如16:20)。我需要识别冒号:,其中数字为先前值(例如9:

我尝试过使用正则表达式

[a-zA-Z]:[a-zA-Z0-9] 

作为模式。问题是我将如何仅替换冒号。如果我尝试替换,冒号之前和之后的整个字符都会被替换。

我尝试过查找和替换,但问题出在

这样的字符串上

abcd日期:01/01/17 10:18 Des:xyz

所有冒号都变为:

我想要的输出是

abcd日期:01/01/17 10:18 Des:xyz

1 个答案:

答案 0 :(得分:1)

尝试使用正则表达式

reg.Pattern = "(\D:)" ' non-digit followed by colon, as group $1

\D指定非数字字符。 (\ D :)指定一个非数字字符,后跟冒号。括号内,此匹配模式将在以后替换中标识为$1;因为它是第一个(也是唯一一个)被捕获的组。

然后像这样替换:

newString = reg.Replace(oldString, "$1 ") 'replace captured group by itself then space

将匹配的组($1)替换为自身,后跟空格:"$1 "

如果模式中只有一个组(例如此组),则可以删除括号并将(仅)捕获的组标识为$+

reg.Pattern = "\D:" ' non-digit followed by colon, as the only group ($+)
newString = reg.Replace(oldString, "$+ ")
Sub Example()
  Dim reg As New RegExp: reg.Global = True: reg.Pattern = "(\D:)"
  Dim oldString As String: oldString = "abcd Date:01/01/17 10:18 Des:xyz"
  Dim newString As String: newString = reg.Replace(oldString, "$1 ")
  Debug.Print newString
End Sub
abcd Date: 01/01/17 10:18 Des: xyz