2012-11-12 85 views
0

我知道我可以通過給定一個分隔符將一個字符串分割成多個子字符串。我知道我也可以選擇基於字符的位置這樣的字符串:VBScript可以根據分隔符的第一個實例分隔字符串嗎?

sAddressOverflow = Right(sAddressLine1,5) 

我想這樣做雖然是拆分輸入字符串是這樣的:

「123南大街公寓。 24B」

但我只想與基於第一空間,以第25個字符的左邊分體式兩種子結束了。因此,使用上述輸入我想要的輸出將是:

Substring1 = 「123南大街」 Substring2 = 「公寓24B。」

這可能嗎?

+0

這是可能的,但沒有內置的功能。你必須創建你自己的。 – Jay

回答

2

正則表達式的優點是,您可以獨立於使用它的位置來配置模式,並且它們具有很強的適應性,所以我更喜歡使用正則表達式進行字符串處理。不幸的是,Ansgar Wiechers的模式並不完全符合您的要求。這是一個:

myString = "1234 6789A 234567 9B12 4567 890" 
Set re = new RegExp 
re.Pattern = "^(.{1,25}) (.*)$" 
Set matches = re.Execute(myString) 

wscript.echo "leftpart: " & matches(0).submatches(0) 
wscript.echo "rightpart: " & matches(0).submatches(1) 
+0

啊,我錯過了* 25字*位。但是,對於這個要求,我只需使用['Mid()'](http://msdn.microsoft.com/en-us/library/wffts6k3%28v=vs.84%29)而不是混淆正則表達式。 –

+0

@AnsgarWiechers很好,它實際上有點棘手:你必須在第25個字符之前的第一個空格處分割。在字符串操作函數中,你需要'left(str,instrrev(left(str,25),「」)-1)'和'mid(str,instrrev(left(str,25))+ 1,len (STR))'。這使得它不易讀取和維護。如果len(str)<25'或者前25個字符中沒有空格,這段代碼也會引發錯誤。使用正則表達式,您可以簡單地測試'matches.count> 0'是否符合這些條件。 – AutomatedChaos

1

沒有可用的這樣的內在功能, 但你可能想試試這個,

add = "123 South Main Street Apt. 24B" 
valid = Left(add,25) 
arr = Split(valid) 
char= InStrRev(add,arr(UBound(arr)))-1 
address1 = Left(add,char) 
address2= Right(add,Len(add)-char) 
Wscript.echo address1 
Wscript.echo address2 

這可能不是最完美的方式,但它的作品!

0

您可以用正則表達式做到這一點,但你需要一個良好定義的格式:

addr = "123 South Main Street Apt. 24B" 

Set re = New RegExp 
re.Pattern = "^(\d+ .*) +(apt\. +\d+(.*?))$" 
re.IgnoreCase = True 

Set m = re.Execute(addr) 
If m.Count > 0 Then 
    WScript.Echo m(0).SubMatches(0) 
    WScript.Echo m(0).SubMatches(1) 
End If 

通過「良好定義的格式」我的意思是,你需要一些「錨」(或固定點)在你的表達來識別字符串中的部分。在示例中,錨是子字符串「apt」。後跟一個或多個數字。