Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在VB.NET中捕获两个字符串之间的值_Regex_Vb.net_Text - Fatal编程技术网

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

Regex 如何在VB.NET中捕获两个字符串之间的值,regex,vb.net,text,Regex,Vb.net,Text,我试图使用VB.NET在两个字符串之间捕获一个值 我从中读取的文件中的每一行都可以包含许多不同的参数,以任何顺序,我希望将这些参数的值存储在它们自己的变量中。两条采样线为: identifier=“121”messagecount=“112358”timestamp=“11:31:41.622”column=“5”row=“98”color=“ORANGE”value=“您好” 或者可以是: identifier=“1121”messagecount=“1123488”timestamp=“19

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

我从中读取的文件中的每一行都可以包含许多不同的参数,以任何顺序,我希望将这些参数的值存储在它们自己的变量中。两条采样线为:

identifier=“121”messagecount=“112358”timestamp=“11:31:41.622”column=“5”row=“98”color=“ORANGE”value=“您好”

或者可以是:

identifier=“1121”messagecount=“1123488”timestamp=“19:14:41.568”valid=“true”state=“running”

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

所以本质上我需要将'identifier=“'and it's closing'”之间的所有内容存储到标识符变量中,以此类推。。。由于每行中这些参数的顺序可能会改变,我不能每次都将第一个值固定在一个变量中,我必须通过它们的名称(标识符、messagecount)等具体地引用它们


有人能帮忙吗?谢谢我想这应该是通过正则表达式实现的,但我不太喜欢这些。我希望每个参数的每个表达式都包含在它自己的语句中,而不是全部包含在一个语句中,谢谢。

您只需要将数据拆分为可管理的块,然后再进行检查。像这样的开始

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

您可以在sub[function]中本地定义所需的变量,然后返回您感兴趣的内容的列表/字典/自定义类。

下面是一个示例。它将一行转换成字典

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


只需在数组/集合中转换它是XML文件的这一部分还是每行显示的实际值?这很好,但它仍然在提取的字符串周围粘贴了一组双引号,您可以修改它以删除这些吗?添加。只需对字符串应用.Trim并指定要修剪的字符。如果您满意,请将此标记为答案:DAh,这不起作用,它现在包含了来自该行的其他无关信息,我想忽略这些信息。这是完整的一行:它现在放置了我希望被忽略的''。您忽略了提到数据是XML格式的。事实上,你的问题清楚地表明,它是以不同的格式。您可能需要阅读有关如何使用
XMLDocument
或类似内容的内容。与手动拆分字符串相比,它更简单、更干净。对不起,它是单行中的单个语句,而不是XML树中的单个语句。我认为这不是真正的XML。它是一系列单独的xml行,它们彼此无关,而不是xml树文件。它们都是从transaciton开始的,只是两者之间的参数不同。
    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