VBScript可以仅根据分隔符的第一个实例分隔字符串吗?

时间:2012-11-12 19:23:17

标签: vbscript

我知道我可以通过赋予分隔符将字符串拆分为多个子字符串。我知道我也可以根据字符位置选择一个子字符串,如下所示:

sAddressOverflow = Right(sAddressLine1,5)

我想做的是分割一个输入字符串,如下所示:

  

“123 South Main Street Apt.24B”

但我只想最终得到两个子串,这些子串基于第25个字符左边的第一个空格进行拆分。所以我使用上面输入的所需输出将是:

  

Substring1 =“123 South Main Street”   Substring2 =“Apt.24B”

这可能吗?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

这可能不是完美的方式,但它有效!!!

答案 2 :(得分: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”。后跟一个或多个数字。