在VB中的多行字符串中查找并提取包含特定文本的行

时间:2016-09-06 21:30:55

标签: vb.net visual-studio-2015

我有来自服务器的数据,这些数据构建了一个字符串(' all_prices')保存在内存中,如下所示:

4440|4420|4430|1720160906
4430|4410|4420|1820160906
4420|4400|4410|1920160906

我想找到包含" 1820160906"的行。并将其作为自己的变量。

为了寻找最轻量的代码,我尝试了:

 MsgBox(File.ReadAllLines(all_prices).FirstOrDefault(Function(x) x.Contains("1820160906")))

all_prices(Of String).FirstOrDefault(Function(x) x.Contains("1820160906"))

all_prices.FirstOrDefault(Function(x) x.Contains("1820160906"))

但以上都没有工作

1 个答案:

答案 0 :(得分:2)

在使用FirstOrDefault查找匹配行之前,您需要将数据拆分为行。

Dim lines = all_prices.Split({vbCrLf, vbCr, vbLf}, StringSplitOptions.None)
Dim match = lines.FirstOrDefault(Function(x) x.Contains("1820160906"))

如果你想要一个单行(忽略扩展方法的行:-),你可以创建一个扩展方法并使用它:

Module StringExtensions
    <Extension>
    Public Iterator Function ReadLines(input As String) As IEnumerable(Of String)
        Using r = New StringReader(input)
            Dim line = r.ReadLine()
            While line IsNot Nothing
                Yield line
                line = r.ReadLine()
            End While
        End Using
    End Function
End Module

Dim match = all_prices.ReadLines().FirstOrDefault(Function(x) x.Contains("1820160906"))

此外,使用EndsWith代替Contains会更有效。