0

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

sAddressOverflow = Right(sAddressLine1,5)

我想做的是拆分这样的输入字符串:

“南大街 123 号公寓 24B”

但我只想得到两个子字符串,它们根据第 25 个字符左侧的第一个空格进行拆分。因此,使用上述输入的我想要的输出将是:

Substring1 = "123 South Main Street" Substring2 = "Apt. 24B"

这可能吗?

4

3 回答 3

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)
于 2012-11-13T12:02:06.117 回答
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

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

于 2012-11-12T22:34:00.297 回答
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”。后跟一位或多位数字。

于 2012-11-13T08:37:51.467 回答