汉王FaceID结果字符串解析

Hanvon FaceID result String Parsing

我在字符串解析方面几乎不需要帮助...这是他来自 FaceID 的结果字符串:

Return(result=\"success\" dev_id=\"6714113100001517\" total=\"24\"\r\n
time=\"2014-06-16 17:56:44\" id=\"399\" name=\"\" workcode=\"0\"
status=\"0\" authority=\"0X55\" card_src=\"from_check\"\r\n
time=\"2014-06-16 17:57:45\" id=\"399\" name=\"\" workcode=\"0\"
status=\"0\" authority=\"0X55\" card_src=\"from_check\"\r\n
time=\"2014-06-16 17:57:58\" id=\"399\" name=\"\" workcode=\"0\"
status=\"2\" authority=\"0X55\" card_src=\"from_check\"\r\n
time=\"2014-06-16 17:58:02\" id=\"399\" name=\"\" workcode=\"0\"
status=\"1\" authority=\"0X55\" card_src=\"from_check\"\r\n
time=\"2014-06-16 17:58:04\" id=\"399\" name=\"\" workcode=\"0\"
status=\"0\" authority=\"0X55\" card_src=\"from_check\"\r\n
time=\"2014-06-16 17:58:19\" id=\"399\" name=\"\" workcode=\"0\"
status=\"2\" authority=\"0X55\" card_src=\"from_check\"\r\n
time=\"2014-11-29 13:23:36\" id=\"399\" name=\"\" workcode=\"0\"
status=\"0\" authority=\"0X55\" card_src=\"from_check\"\r\n
time=\"2014-11-29 13:23:46\" id=\"399\" name=\"\" workcode=\"0\"
status=\"2\" authority=\"0X55\" card_src=\"from_check\"\r\n
time=\"2014-11-29 13:23:49\" id=\"399\" name=\"\" workcode=\"0\"
status=\"0\" authority=\"0X55\" card_src=\"from_check\"\r\n)

我知道如何遍历字符串和匹配的标记,但我想知道是否可以为这种类型的字符串提供任何正则表达式?或者如果将它转换为 XML 或 JSON 很容易?如果是这样,性能会更好吗?

我想要时间、ID、姓名、工作代码、状态、权限的单独值,card_src — 例如对象列表或集合。

要分隔您可以使用的值:

\b(time|id|name|workcode|status|authority|card_src)=\"(.*?)\"

DEMO


在捕获组 1 中你得到了名字。
在捕获第 2 组时,您会得到值。

当然 - 你可以做一个正则表达式:

time=\"([^\]+)\" id=\"([^\]+)\" name=\"([^\]+)\" workcode=\"([^\]+)\" status=\"([^\]+)\" authority=\"([^\]+)\" card_src=\"([^\]+)\"

然后遍历每个匹配项中的组以查看匹配值(这将是特定于语言的代码)

在上面的正则表达式中
\代表一个\(反斜杠必须转义)
( )表示一个捕获组(所以捕获的值可以在结果中引用
[^\]+ 表示 class 个字符 而不是 \ 重复一次或多次

这是循环匹配以提取捕获值的 C# 代码示例:

var input = "your input string... cant be bothered to repeat it here!";
var pattern= @"time=\""([^\]+)\"" id=\""([^\]+)\"" name=\""([^\]+)\"" workcode=\""([^\]+)\"" status=\""([^\]+)\"" authority=\""([^\]+)\"" card_src=\""([^\]+)\""";
var matches = Regex.Matches(input, pattern);
foreach (var match in matches)
{
   Console.WriteLine("time is: {0}", match.Groups[1]);
   Console.WriteLine("id is: {0}", match.Groups[2]);
   Console.WriteLine("name is: {0}", match.Groups[3]);
   // and so on...
}