匹配字符串与十六进制字符

时间:2014-03-02 21:53:42

标签: c# regex

我正在从C ++转换我的一些代码,并希望利用Regex来实现我的程序中的场景。用户故事说该字符串需要是4个标签之间的3组十六进制数字(但是这些标签没有结束标签叹息)要使用的4个标签是{{1} },<DIV><GKY><UID>如果他们愿意的话,我喜欢给我的用户更多的代码灵活性,所以我希望我的一个简单的正则表达式我可以写一个简单的方法。我找到了我想匹配的代码,如果它是一个十六进制字符串(想想我至少),但我不能让我的Reg表达式测试工具与它背后的标签相匹配。以此字符串为例。

<END>

如果正则表达式返回<DIV>A9F81123C8288B34758D0481E8271843<GKY><UID><END>或者只返回十六进制字符串,我不会介意。但我希望它能够从所有这三种场景中返回它

  • <DIV>A9...
  • <DIV>A9F81123C8288B34758D0481E8271843<GKY><UID><END>
  • <GKY><DIV>A9F81123C8288B34758D0481E8271843<UID><END>

完整的关键示例看起来像这样

<GKY><UID><DIV>A9F81123C8288B34758D0481E8271843<END>

到目前为止,我在单元测试中的所有内容都是告诉该字符串包含4个标签。所以我被困在这里

<DIV>A9F81123C8288B34758D0481E8271843<GKY>1234568790ABCDEF0<UID>0422ABCDEF<END>

div返回空

3 个答案:

答案 0 :(得分:2)

如果你真的不关心标签本身,你可以试试这个:

(?<=>)[A-Fa-f0-9]+(?=<)

它正确匹配您的所有测试用例,请在Rubular上查看它。

如果你也想要前面的标签,这是可以的(预览here):

(?<tag><\w+>)(?<string>[A-Fa-f0-9]+)(?=<)

答案 1 :(得分:1)

string div = Regex.Match(inputKey, @"<DIV>([A-Fa-f0-9]{32})").Value;

答案 2 :(得分:1)

它应该适合你:

^((?<gdiv><DIV>[A-Fa-f0-9]*)|(?<ggky><GKY>[A-Fa-f0-9]*)|(?<guid><UID>[A-Fa-f0-9]*))*<END>$

试验:

input:   <DIV>A9F81123C8288B34758D0481E8271843<GKY><UID><END>
matches: gdiv   <DIV>A9F81123C8288B34758D0481E8271843
         ggky   <GKY>
         guid   <UID>

input:   <GKY><DIV>A9F81123C8288B34758D0481E8271843<UID><END>
matches: gdiv   <DIV>A9F81123C8288B34758D0481E8271843
         ggky   <GKY>
         guid   <UID>

input:   <GKY><UID><DIV>A9F81123C8288B34758D0481E8271843<END>
matches: gdiv   <DIV>A9F81123C8288B34758D0481E8271843
         ggky   <GKY>
         guid   <UID>

input:   <UID>0422ABCDEF<DIV>A9F81123C8288B34758D0481E8271843<GKY>1234568790ABCDEF0<END>
matches: gdiv   <DIV>A9F81123C8288B34758D0481E8271843
         ggky   <GKY>1234568790ABCDEF0
         guid   <UID>0422ABCDEF

input:   <GKY>1234568790ABCDEF0<DIV>A9F81123C8288B34758D0481E8271843<UID>0422ABCDEF<END>
matches: gdiv   <DIV>A9F81123C8288B34758D0481E8271843
         ggky   <GKY>1234568790ABCDEF0
         guid   <UID>0422ABCDEF

请参阅rebular上的示例。

注意:

虽然其中一个标记(DIVGKYUID)值可能为空,但我建议您使用[A-Fa-f0-9]*代替 - 例如 - [A-Fa-f0-9]{16}并自行测试值的长度。