【问题标题】:Regular Expression option for 3 or less characters3 个或更少字符的正则表达式选项
【发布时间】:2012-09-07 21:19:44
【问题描述】:

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

  • 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$"

【问题讨论】:

  • 你有问题 -> 你认为是正则表达式。现在你有两个问题! ;-) - 抱歉,我无法阻止自己... (regex.info/blog/2006-09-15/247)
  • @JakubKonecki - 至少链接到引用的来源。
  • @Oded - 它可以take a long time 找出源...
  • 你想用正则表达式做什么,也就是说 - 你想达到什么目的?
  • [a-z-] 会将- 添加到要匹配的字符类中(如果字符类以- 开头或结尾,则会包含在内)。

标签: c# regex


【解决方案1】:
\w{1,3}

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

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

【讨论】:

  • \w{,3} 小于或等于 3
【解决方案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

Try it yourself on Regexr.

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

【讨论】:

  • 我相信** 是试图使字符在粗体中。 OP 试图解决的问题是匹配 -
【解决方案3】:

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

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

字段说明:

  • 客户MCCOYSMITH-JOHNSONJAKE MCCOY
  • Id15H3H
  • Id2L24R32L-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

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多