Hanvon FaceID结果String Parsing

时间:2015-01-15 14:21:49

标签: regex xml json 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很容易?如果是这样,表现会更好吗?

我想要Time,ID,Name,Workcode,status,authority,card_src的单独值 - 例如列表或对象集合。

2 个答案:

答案 0 :(得分:0)

要分隔您可以使用的值:

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

DEMO


在捕获第1组时,您会得到名称 在捕获组2时,您将获得该值。

答案 1 :(得分:0)

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

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

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

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

这是循环匹配以提取捕获值的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...
}