我在下面有一个正则表达式,适用于字符串示例,如:
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$"
答案 0 :(得分:3)
答案 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
编辑:由于@Oded让我注意到,问题中的星标不是输入字符串的一部分 - 删除并更新了Regexr链接。
答案 2 :(得分: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
,3H
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