2017-06-05 63 views
2

我在Excel中工作以取出錯誤的URL並替換不正確的字符。我想要替換的字符是「%20」,但是沒有辦法知道字符串中會有多少個字符。可能只有一個「%20」或5「%20%20%20%20%20」或它們之間的任何其他數量,但不管有多少個「%20」字符,我只想替換一個正斜槓「/」。VBScript替換爲未知長度的字符串

我知道我可以使用類似下面,但不希望結束與一個以上的前進,如果有一個以上的「%20」

Sub fixURL() 

Worksheets("Google Feed Original").Activate 

Worksheets("Google Feed Original").Columns("N").Replace _ 
     What:="%20", replacement:="/", LookAt:=xlPart 

End Sub 

例如起始URL可能削減看起來像:

http://domainname.com/products/prodName%20%20%20ProdNumber

不管「20%」有多少是在中間,我想獲得像這樣,而不是格式化:

http://domainname.com/products/prodName/ProdNumber

有沒有什麼方法可以用一個「/」來代替它們,不管字符串中有多少個「%20」?

謝謝。

回答

-1

只要存在/字符的重複實例,您可以編寫一個遞歸函數來執行Replace調用。自從我編寫VBScript以來已經有好幾年了,但我不記得有一種功能可以在語言中使用這種類型的替換。

+0

另一個有趣的想法。不知道如何編碼,但也會看到這一點。謝謝。 – waterwalk77

2

使用正則表達式(開始here)與一個「/」替換字符串「%20」的序列:

>> s = "http://domainname.com/products/prodName%20%20%20ProdNumber" 
>> Set r = New RegExp 
>> r.Global = True 
>> r.Pattern = "(%20)+" 
>> WScript.Echo s 
>> WScript.Echo r.Replace(s, "/") 
>> 
http://domainname.com/products/prodName%20%20%20ProdNumber 
http://domainname.com/products/prodName/ProdNumber 
>> 
+0

謝謝,我在看這個,但意識到我可能遇到一個問題,因爲這是在Mac上:(試圖確定我是否可以先在Mac上使用RegExp – waterwalk77

+0

無法在Mac上執行正則表達式,因此我要不得不嘗試這種不同的方式。感謝您的迴應。 – waterwalk77

1

下面的代碼將與單個替換所有連續%20 /。它沒有使用任何正則表達式。它首先使用分隔符%20分割字符串,然後如果每個數組元素的長度大於0,則使用分隔符/連接它們。

str = "http://domainname.com/products/prodName%20%20%20ProdNumber" 
a=Split(str,"%20") 
For i=0 To UBound(a) 
    If Len(a(i))>0 Then 
     requiredStr = requiredStr & a(i)&"/" 
    End If 
Next 
requiredStr=Left(requiredStr,Len(requiredStr)-1) 
MsgBox requiredStr 

讓我知道它是否適合你。

輸出: enter image description here