2012-11-12 58 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”。后跟一个或多个数字。