2017-05-04 129 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將總是由正則表達式標識的字符串。如我錯了請糾正我。 –