0

我在下面有一个正则表达式,适用于以下字符串示例:

  • MCCOY 3H L24 FINAL 02-28-2012.dwg或者
  • SMITH-JOHNSON 5H R32 FINAL 05-26-2012.dwg

但是现在我试图弄清楚如何更改正则表达式以适用于上面的示例,如果它们是这样的:

  • MCCOY 3H L-ABC FINAL 02-28-2012.dwg或者
  • SMITH-JOHNSON 5H R-123 FINAL 05-26-2012.dwg

他们也可以像

  • MCCOY 3H L-C2 FINAL 02-28-2012.dwg或者
  • SMITH-JOHNSON 5H R-2 FINAL 05-26-2012.dwg

总而言之,中间部分总是有一个Alphabetic 字符后跟一个 Dash,然后它可能有多达 3 个数字或字母字符或少至 1 个数字或字母字符

"^[a-z]+(?:[ -][a-z]+)*\s+\d+[a-z]\s+[a-z]\d+\s+[a-z]+\s+\d{2}-\d{2}-\d{4}\.dwg$"
4

3 回答 3

3
\w{1,3}

匹配 1 到 3 个字母数字字符。

http://msdn.microsoft.com/en-us/library/az24scfc.aspx#quantifiers

于 2012-09-07T13:02:12.060 回答
2

我需要添加一个(?i)来让它工作,因为[a-z]不匹配大写字符 - 至少在我通常使用的正则表达式引擎中:) 所以我得到了这个:

(?i)^[a-z]+(?:[ -][a-z]+)*\s+\d+[a-z]\s+[a-z]-\w{1,3}\s+[a-z]+\s+\d{2}-\d{2}-\d{4}\.dwg

在 Regexr 上自己尝试一下

编辑:正如@Oded 让我注意到的那样,问题中的星星不是输入字符串的一部分 - 删除并更新了 Regexr 链接。

于 2012-09-07T13:07:36.360 回答
1

这是将分别返回所有字段的正则表达式:

^(?<Customer>.*?)\s+?(?<Id1>[\-a-z0-9]*?)\s+?(?<Id2>[\-a-z0-9]*?)\s+?FINAL\s+?(?<Date>[\-0-9]{10})\.dwg$

字段说明:

  • 客户: MCCOY, SMITH-JOHNSON,JAKE MCCOY
  • 5H身份证1 :,3H
  • Id2 : L24, R32, L-ABC, R-123,L-C2
  • 日期: 02-28-2012,05-26-2012

测试:

MCCOY         3H L24   FINAL 02-28-2012.dwg
SMITH-JOHNSON 5H R32   FINAL 05-26-2012.dwg
JAKE MCCOY    3H L-ABC FINAL 02-28-2012.dwg
SMITH-JOHNSON 5H R-123 FINAL 05-26-2012.dwg
MCCOY         3H L-C2  FINAL 02-28-2012.dwg
SMITH-JOHNSON 5H R-2   FINAL 05-26-2012.dwg
于 2012-09-07T13:19:44.473 回答