汉王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)=\"(.*?)\"
在捕获组 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...
}
我在字符串解析方面几乎不需要帮助...这是他来自 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)=\"(.*?)\"
在捕获组 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...
}