Regex 如何在VB.NET中捕获两个字符串之间的值
我试图使用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)等具体地引用它们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
有人能帮忙吗?谢谢我想这应该是通过正则表达式实现的,但我不太喜欢这些。我希望每个参数的每个表达式都包含在它自己的语句中,而不是全部包含在一个语句中,谢谢。您只需要将数据拆分为可管理的块,然后再进行检查。像这样的开始
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