我有一段代码可以使用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)
答案 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))
。