我试图使用VB.NET捕获两个字符串之间的值
读入的文件中的每一行都可以按任意顺序包含许多不同的参数,并且我希望将这些参数的值存储在它们自己的变量中。两个样本行将是:
标识符=" 121" messagecount =" 112358"时间戳=" 11:31:41.622"柱=" 5"行=" 98"颜色=" ORANGE"值="你好"
或者可能是:
标识符=" 1121" messagecount =" 1123488"时间戳=" 19:14:41.568"有效=#&34;真"状态="运行"
此外,这可能不是字符串中的唯一文本,在我想要捕获的参数之前和之后(以及之间)可能还有其他值。
所以基本上我需要将所有内容存储在' identifier ="'并且它正在关闭'''到标识符变量,等等...由于每行中这些参数的顺序可以改变,我不能每次只将第一个值粘贴在一个变量中,我必须具体通过他们的内容来引用它们name是(identifier,messagecount)等。
有人可以帮忙吗?谢谢。我想这是通过一个正则表达式,但我不是那么热。我希望每个参数的每个表达式都在其自己的陈述中,而不是一个一个,谢谢。
答案 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