【问题标题】:Regular Expression: Match Hex/Key Strings正则表达式:匹配十六进制/键字符串
【发布时间】:2013-03-16 07:11:36
【问题描述】:

我已经尝试自己创建一个正则表达式来做到这一点,但老实说,我现在的想法是如此令人难以置信,我必须寻求帮助......这也可能对未来的人们有所帮助。

我有以下输入模板:

06-6A-BF-05-AF-84-DF-A4-23-7C-BE-B4-6C-95-D7
JK1T-XTSRV-2HC4D-RP4S7-ZMKRG

我需要从输入字符串中挑选出这两个字符串。输入字符串可能如下所示:

JK1T-XTSRV-2HC4D-RP4S7-ZMKRG
FDGF-A1S0M-5M8XJ-T08WC-BCZSJ
C6-6C-1C-17-B7-EE-BE-EA-E3-7C-EF-23-6C-12-F1
asdf234 ,f C6-324_EE

在这种情况下,将返回以下内容:

JK1T-XTSRV-2HC4D-RP4S7-ZMKRG, FDGF-A1S0M-5M8XJ-T08WC-BCZSJ, C6-6C-1C-17-B7-EE-BE-EA-E3-7C-EF-23-6C-12-F1

因此,正则表达式需要具有以下限制才能匹配字符串:

  • 15 个由- 分隔的两个字符(数字或字母)对
  • 5 个由- 分隔的四个字符(数字或字母)对

什么正则表达式会匹配这些?

【问题讨论】:

  • 前两个输入字符串示例既不是十六进制字符串,也不匹配文字描述“5个四字符对[原文如此],由-分隔”
  • 您提到的第一个字符串似乎是hex,而另一个不是?您是否真的关心每个 2 或 4 个字符的文本是否为十六进制值?
  • @JanDvorak 编辑 :) 对此感到抱歉。

标签: regex


【解决方案1】:

你应该使用两个正则表达式:

(\w{2}-){14}\w{2}
\w{4}-(\w{5}-){3}\w{5}

第二种实际上是一个四个字符和四个五个字符。

测试 1: http://fiddle.re/h3ve6

测试 2: http://fiddle.re/3a5e6

【讨论】:

  • 当然我可以做两个......谢谢......也很抱歉搞砸了限制,我很累:)
  • 在示例情况下,第二个似乎匹配两个 FDGF-A1S0M-5M8XJ-T08WC-BCZSJ - 它匹配 FDGF-A1S0M-5M8XJ-T08WC-BCZSJ 和 T08WC-
  • 对不起,我确实说过我没有测试过第二个,有人编辑了我的答案以删除那个位! ;) 让我看看...
  • 啊,好吧,我看到了混乱,我不得不为重复的中间部分使用一个组,所以group(1) 总是会返回一个部分结果。如果您在循环中执行find(),然后每次应该工作时只需使用group(0)。
  • 感谢您的努力!再次接受。
猜你喜欢
  • 1970-01-01
  • 2017-02-27
  • 2012-11-28
  • 1970-01-01
  • 2016-12-30
  • 2018-05-01
  • 2021-02-13
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多