2017-05-04 127 views
-1

我需要用(冒号空格)替换所有:(冒号)。我可以用替换功能来做到这一点。识别字符串中的数字并替换 - VBA

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

但是这也取代了时间格式(例如16:20)。我需要确定其具有数作为我已使用正则表达式

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

作为图案尝试了前面的值(例如,9:

冒号:。问题是我将如何从此取代冒号。如果我尝试更换,冒号前后的整个字符都将被替换。

我试图查找和替换,但问题是字符串像

ABCD日期:17年1月1日10:18德:XYZ

所有的冒号越来越改为:

我想输出是

ABCD日期:17年1月1日10:18德:XYZ

+0

你的意思是你不想更换,如果有冒号前多少? – SJR

+0

查看“在vba中使用正则表达式” - 这会让你想要你需要解决的问题。如果你找到一些例子(这里有数百个),你仍然遇到麻烦,请回来澄清问题或发布一个新问题。 – Dave

+0

如何使用Regular Expresions? [如何在Microsoft Excel中使用正则表达式(正则表达式)in-cell和loops](http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-双胞胎和环) –

回答

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 
+0

非常感谢你[A.S.H.](http://stackoverflow.com/users/4926357/a-s-h)。这帮了我很多。你能帮我理解在这种情况下替换函数是如何工作的吗? –

+1

@ManuMohan不用客气。答案中有一些exaplanations作为评论。 '\ D'指定一个非数字字符。 '(\ D:)'指定一个非数字字符,后跟冒号。括号表示这个匹配模式将在替换中被识别为'$ 1'。最后,替换替换匹配的组('$ 1'),接着是空格。希望这可以帮助。 –

+0

谢谢ASH ..我刚刚被'$ 1'弄糊涂了。所以我的理解是$ 1将总是由正则表达式标识的字符串。如我错了请纠正我。 –