从字符串中提取数字" times_series_graphs 34"

时间:2015-07-24 18:31:03

标签: string vba excel-vba excel

我有一个从1到34的图表列表,名为" times_series_graphs 1",times_series_graphs 2"," times_series_graphs 3"等等一直到34岁。

有没有办法在VBA中使用右,左,函数等提取数字?

所以我想要1,2,...... 34

3 个答案:

答案 0 :(得分:1)

如果字符串的左侧部分是静态的两种简单方法:

  1. times_series_graphs "替换为"" :

    myNumber = Replace(myString, "times_series_graphs ", "")
    
  2. 使用字符Split的{​​{1}}函数并保留生成的数组的第二个元素:

    " "

答案 1 :(得分:1)

使用正确的功能

因为你只需要34,你可以使用右/左功能提取最后两个字符,然后修剪它。

Dim yourString As String = "times_series_graphs 1"
Dim numberString As String = LTrim(Right(yourString , 2))

如果你超过两个字符,这个解决方案很快就会崩溃,因为你不能只选择数字和空格了。我会推荐以下选项之一。

对字符串进行标记

第一个选项是使用空格作为分隔符来标记字符串。您可以在空格上拆分字符串并获取第二个标记。

Dim yourStringAs String = "times_series_graphs 1" 
Dim tokens() As String = Split(yourString)

使用正则表达式

另一种选择是使用Regex。下面的正则表达式将捕获第二组中的键以及正则表达式匹配返回的第三组中的值(数字)。

([a-zA-Z0-9_]+)\s([0-9]+)

还有很多其他方法可以提取价值。对我来说,我会选择正则表达式选项,因为它提供了最大的灵活性。如果你得到的字符串在数字之前没有相同的键,那么你可以快速访问这两个字段进行比较。

答案 2 :(得分:1)

如果你不知道字符串将包含什么,你可以遍历它以查找数字。我想你缺少的是:

IsNumeric(myString)

返回true或false。 完整的代码在这里:

numberFound = False
For x = 1 To Len(myString)
    temp = Mid(myString, x, 1)
    If IsNumeric(temp) Then
        working = working & temp
    ElseIf numberFound Then
        Exit For
    End If
Next x
Final = CDbl(working)

除此之外,你可以使用正则表达式。