我正在从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返回空
答案 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上的示例。
注意:强>
虽然其中一个标记(DIV
,GKY
或UID
)值可能为空,但我建议您使用[A-Fa-f0-9]*
代替 - 例如 - [A-Fa-f0-9]{16}
并自行测试值的长度。