我正在从txt文件中提取行。
此行包含如下值:
DESCRIPTION 1 1.234,00 15.980,00 [etc.]
我想提取这些值(我的意思是只有数值)。
所以我想找到第一个逗号,向后执行一个for循环直到第一个空格并执行For循环前进的小数位数。 我应该去第二个逗号并再次执行这些循环。
您能否建议一些对我的解决方案有用的代码?
答案 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,00
和0,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()