我在使用VBS提取特定字符串时遇到问题

时间:2019-04-02 20:27:23

标签: vbscript split

我有一段代码可以使用Split成功提取特定字符串。我想要一个不同的字符串,但我没有得到正确的输出。

这是我要从中提取字符串的数据。

N126(Total: 476.00 in, 119.0 sq.in, 1 cu.in, .003 lb)

目前,我可以使用此行代码在sq.in和cu.in之间提取1。

volume = Split(Split(srtContents, "sq.in,")(1), "cu.in,")(0)

我希望得到119.0,而不是1,但是我总是得到119.0平方米。

我知道我为什么要得到它,我只是不知道如何解决它。这是我的代码:

area = Split(Split(srtContents, "in,")(1), "sq.in,")(0)

1 个答案:

答案 0 :(得分:0)

一种解决方法是将输入字符串以逗号分隔,后跟一个空格:

s = "N126(Total: 476.00 in, 119.0 sq.in, 1 cu.in, .003 lb)"
a1 = Split(s, ", ")

然后在空格处分割您感兴趣的字段:

a2 = Split(a1(1), " ")
v = a2(0)

一种更优雅的方法,尤其是当您要从字符串中提取多个值时,将是正则表达式匹配。

s = "N126(Total: 476.00 in, 119.0 sq.in, 1 cu.in, .003 lb)"

Set re = New RegExp
re.Pattern = "(\d+\.\d+) in, (\d+\.\d+) sq\.in, (\d+) cu\.in, (\.\d+) lb"

For Each m In re.Execute(s)
    total  = m.Submatches(0)
    area   = m.Submatches(1)
    volume = m.Submatches(2)
    weight = m.Submatches(3)
Next

WScript.Echo area

或者,如果您想采用更通用的方法:

s = "N126(Total: 476.00 in, 119.0 sq.in, 1 cu.in, .003 lb)"

Set re = New RegExp
re.Pattern = " ((?:\d*\.)?\d+) "
re.Global  = True

For Each m In re.Execute(s)
    WScript.Echo m.Submatches(0)
Next

请注意,无论哪种方式,提取的值仍然是字符串。如果您需要将它们用作数值,则需要在提取后将其转换,例如weight CDbl(m.Submatches(3))