ruby – 有没有办法缩短这个正则表达式?

我希望匹配A0123456,E0123456或IN:A0123456Q等格式的字符串.我最初制作了这个正则表达式

^(IN:)?[AE] [0-9] {7} Q $?

但它匹配IN:E012346,最后没有Q.所以我创建了这个正则表达式

(^ IN:[AE] [0-9] {7} Q $)|(^ [AE] [0-9] {7} $)

是否有任何方法可以缩短此正则表达式,以便它既需要IN:又需要Q(如果它们存在),但如果两者都不存在则不需要?

编辑:正则表达式将在Ruby中使用.

编辑2:我更改了正则表达式以反映我匹配错误的字符串,因为它仍然匹配IN:A0123456.

编辑3:下面的两个答案都是有效的,但由于我使用的是Ruby 2.0并且更喜欢正则表达式,我可以使用以防万一我改变我的应用程序并且不想使用子表达式调用的Ruby风格,我选择接受matt的答案.

解决方法

如果您使用的是Ruby 2.0,则可以使用 if-then-else conditional match(在Ruby文档中未记录,但确实存在):
/^(IN:)?[AE][0-9]{7}(?(1)Q|)$/

条件部分是(?(1)Q |),表示如果组号1匹配,则匹配Q,否则不匹配.由于组号1是(IN :),这可以达到你想要的效果.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...