在字符串中查找第一个逗号,然后在空格之间提取值

时间:2014-01-28 14:21:49

标签: asp.net vb.net

我正在从txt文件中提取行。

此行包含如下值:

 DESCRIPTION 1    1.234,00    15.980,00 [etc.]

我想提取这些值(我的意思是只有数值)。

所以我想找到第一个逗号,向后执行一个for循环直到第一个空格并执行For循环前进的小数位数。 我应该去第二个逗号并再次执行这些循环。

您能否建议一些对我的解决方案有用的代码?

4 个答案:

答案 0 :(得分:2)

根据你的描述,如果你只需要逗号之前的十进制数字,那么你可以用一个非常简单的正则表达式来完成:

Dim s = "DESCRIPTION 1    1.234,00    15.980,00"
Dim pattern = "\d+(\.\d+)?,\d+"
Dim matches = System.Text.RegularExpressions.Regex.Matches(s, pattern)

For Each match in matches
    Console.WriteLine(match.Value)
Next

'Outputs:
'
'1.234,00
'15.980,00

这是正则表达式的快速细分:

  • \d+ - \d[0-9]的简写,只是表示"任何数字字符"。 +只表示"一个或多个"
  • \. - 这只是一个句号字符。
  • , - 这只是一个逗号。
  • ( ... ) - 括号只是创建一个组(将其视为子正则表达式)
  • ? - 问号意味着前一项是可选的。在这种情况下,这意味着匹配(\.\d+)?的群组是可选的,这样您就可以匹配0.000,000,00

在该正则表达式中,如果逗号和句点是可选的,则可以在其后添加?

答案 1 :(得分:0)

我认为您需要查看System.Text.Regex

Match m = Regex.Match("DESCRIPTION 1    1.234,00    15.980,00", ".*?( [0-9]*?.(?'n1'[0-9]+),(?'n2'[0-9]+)))
While m.Success
    System.Diagnostics.Debug.WriteLine(m.Groups["n1"].Value + "  "+m.Groups["n2"].Value);

    m = m.NextMatch()
End While

答案 2 :(得分:0)

我的Visual Basic知识非常有限,但您不能使用VB.NET中提供的IsNumeric函数吗?

像这样:

' initial string/row/etc
    Dim s As String = "DESCRIPTION 1 1.234,00 15.980,00"

    ' Split string based on spaces
    Dim words As String() = s.Split(New Char() {" "c})
    ' Use For Each loop over split and display them
    Dim word As String
    For Each word In words
        If IsNumeric(word) Then
            Console.WriteLine(word & " is numeric")
        Else
           Console.WriteLine(word & " is not numeric")
        End If
    Next

答案 3 :(得分:0)

如果列是固定宽度,您可以获得如下值:

Dim input As String = "DESCRIPTION 1    1.234,00    15.980,00"
Dim col1 As String = input.SubString(17, 12).Trim()
Dim col2 As String = input.SubString(29).Trim()