如何在VB.NET中捕获两个字符串之间的值

时间:2014-07-09 12:51:03

标签: regex vb.net text

我试图使用VB.NET捕获两个字符串之间的值

读入的文件中的每一行都可以按任意顺序包含许多不同的参数,并且我希望将这些参数的值存储在它们自己的变量中。两个样本行将是:

标识符=" 121" messagecount =" 112358"时间戳=" 11:31:41.622"柱=" 5"行=" 98"颜色=" ORANGE"值="你好"

或者可能是:

标识符=" 1121" messagecount =" 1123488"时间戳=" 19:14:41.568"有效=#&34;真"状态="运行"

此外,这可能不是字符串中的唯一文本,在我想要捕获的参数之前和之后(以及之间)可能还有其他值。

所以基本上我需要将所有内容存储在' identifier ="'并且它正在关闭'''到标识符变量,等等...由于每行中这些参数的顺序可以改变,我不能每次只将第一个值粘贴在一个变量中,我必须具体通过他们的内容来引用它们name是(identifier,messagecount)等。

有人可以帮忙吗?谢谢。我想这是通过一个正则表达式,但我不是那么热。我希望每个参数的每个表达式都在其自己的陈述中,而不是一个一个,谢谢。

2 个答案:

答案 0 :(得分:1)

您只需要将数据拆分为可管理的块,然后再进行操作。这样的事情让你开始。

Private Sub ProcessMyData(LineOfData As String)

    ' NOTE!  This assumes all your 'names' have no spaces in!
    Dim vElements = LineOfData.Split({" "c}, StringSplitOptions.RemoveEmptyEntries)

    For Each vElement In vElements
        Dim vPair = vElement.Split({"="c})

        Dim vResult = vPair(1).Trim(Convert.ToChar(34))

        Select Case vPair(0).ToLower
            Case "identifier"
                MyIDVariable = CInt(vResult)

            Case "colour"
                MyColourVariable = vResult

            ' etc., etc.
        End Select
    Next
End Sub

您可以在子[function]中定义您想要的本地变量,然后返回您感兴趣的事物的列表/词典/自定义类。

答案 1 :(得分:1)

以下是一个如何进行此操作的示例。它将一行转换为字典。

这将捕获由a-z字符组成的任何字符串(不区分大小写)作为属性名称,然后捕获值字符串中除"之外的任何字符。 (如果"可以在字符串中出现"",则需要为此添加一些处理。)

    Imports System.Text.RegularExpressions
    [...]

            Dim s As String = 
               "identifier=""121"" messagecount=""112358"" " &
               "timestamp=""11:31:41.622"" column=""5"" row=""98"" " &
               "colour=""ORANGE"" value=""Hello"""
            Dim d As New Dictionary(Of String, String)

            Dim rx As New Regex("([a-z]+)=""(.*?)""", RegexOptions.IgnoreCase)

            Dim rxM As MatchCollection = rx.Matches(s)
            For Each M As Match In rxM
                d.Add(M.Groups(1).Value, M.Groups(2).Value)
            Next

            ' Dictionary is ready
            ' test output
            For Each k As String In d.Keys
                MsgBox(String.Format("{0} => {1}", k, d(k)))
            Next