时间:2017-07-24 16:00:19

标签: regex match

我正在尝试创建一个正则表达式,该正则表达式只应与示例中提供的段落中长度为11的字母数字字符匹配。问题是它还选择仅包含字母的字符串。

我的正则表达式和输入数据can be seen here

示例文字:

 RCLO                                          DD  12-10-15  IAD        RO N2905198759                                PTD 12-08-15  SWC          
 CRO N2905198759                               FCD 12-07-15  WOT 12-0
 MCN 999LDCMCWCG PROJECT 309097-2          VER  04    OCO TSR BSRNCA70M00 
 WORK DESCRIPTION AND NOTES:                          CCO TSR BSRNCA70M00 
MANUALLY 
 DIVERSER CIRCUITS SEE RPON, 9152 IRMK AAI DWGVILAZW02 IRMK ALCON  IDR INFORMATION U 
 PDATED ON THE DESIGN AT HFESILWL AND EGVGILEG        

模式是

\b([A-Z0-9]{11})\b

在上面的例子中,它不应该选择“DESCRIPTION”和“INFORMATION”

1 个答案:

答案 0 :(得分:3)

您可以使用

\b(?=[A-Z]*[0-9])(?=[0-9]*[A-Z])[A-Z0-9]{11}\b

请参阅regex demo

<强>详情

  • \b - 字边界
  • (?=[A-Z]*[0-9]) - 在0+大写ASCII字母后,必须有1个ASCII数字
  • (?=[0-9]*[A-Z]) - 在0+ ASCII数字后,必须有1个大写ASCII字母
  • [A-Z0-9]{11} - 11个大写ASCII字母或数字
  • \b - 一个尾随字边界。