我有以下字符串格式。我们有任何模式匹配的字符串搜索吗?/
({'BTAddress': <'00:22:58:07:76:9B'>, 'Name': <'Some-Name'>, 'Alias': <'some-Name'>, 'Class': <uint32 12316>, 'Adapter': <objectpath '/org/bluez/3196/hci0'>},)
我想解析上面的字符串C.而不是做原始解析,任何建议使用模式明智的解析? 感谢您的帮助。
我有以下字符串格式。我们有任何模式匹配的字符串搜索吗?/
({'BTAddress': <'00:22:58:07:76:9B'>, 'Name': <'Some-Name'>, 'Alias': <'some-Name'>, 'Class': <uint32 12316>, 'Adapter': <objectpath '/org/bluez/3196/hci0'>},)
我想解析上面的字符串C.而不是做原始解析,任何建议使用模式明智的解析? 感谢您的帮助。
您可以使用strtok
:http://www.cplusplus.com/reference/clibrary/cstring/strtok/。 你将不得不做一些手工工作,但它工作正常。
注意:char
指针,你通过将被操纵!
strtok似乎是一个明显的解决方案,但是如果他试图通过strtok'ing代替逗号(“,”)来分隔每个键:值对,那么如果逗号出现在集合中的某个值的引号内,可能会变得杂乱。 – selbie 2012-01-30 09:31:19
我会建议'strtok()'非常接近“*正在执行原始解析*” – Clifford 2012-01-30 09:33:24
我会开始将字符串分离为键值标记。然后,您可以分离令牌并删除开始和结束。 这是非常原始的解析,但没有指定你想解析什么样的字符串..结合它与正则表达式像omu_nergu建议看起来也很好。 – ezdazuzena 2012-01-30 10:02:35
正则表达式库可能是您需要的。如果您使用的是具有regular expression库的GNU C库,请使用pattern matching。对于Win32编译器,您可以使用GNU代码的端口Regex for Windows。
我的建议如下:
A) try using strtok to split the text at ',' and then split the resulting subtexts only once at ':' ,that way you would get the key,value pairs you desire.
B) use a regEx api under C that would basically solve your issue.
而且我可能会建议在C寻找键值存储为您解析文本(C++有一个,但我真的不知道C)
你可以提供关于C++中的键/值的附加细节吗? – Whoami 2012-01-31 05:58:34
你想解析C中的JSON字符串吗?如果你用这种方式说明问题,你可能会得到不同的回答。 – selbie 2012-01-30 09:27:41