3个或更少字符的正则表达式选项

时间:2012-09-07 12:51:49

标签: c# regex

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

  • 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

总而言之,中间部分将始终具有字母字符,后跟短划线,然后它可以多达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$"

3 个答案:

答案 0 :(得分:3)

\w{1,3}

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

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

答案 1 :(得分:2)

我需要添加(?i)才能使其正常工作,因为[a-z]与大写字符不匹配 - 至少在我通常使用的正则表达式引擎中:)所以我到达了这个:< / p>

(?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

Try it yourself on Regexr

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

答案 2 :(得分:1)

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

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

字段描述:

  • 客户MCCOYSMITH-JOHNSONJAKE MCCOY
  • Id1 5H3H
  • Id2 L24R32L-ABCR-123L-C2
  • 日期02-28-201205-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