正则表达式匹配顺序

时间:2013-01-21 00:58:04

标签: c# regex

从这个可能的输入我想要加工粗体文字:

  

类型:惊悚,冒险,行动,2012

     

类型:惊悚,冒险,行动

我做了类似(?<=Genre: ).*(?=(, \d{4})?)

的事情

我的问题是我把这个部分(, \d{4})?希望因为匹配", 2012"它会在此时停止但不是,它只是忽略匹配...

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

.*贪婪,所以它会消耗任何东西。由于带有数字的最后一部分是可选的,所有这些都被.*消耗。

可能有一种更有说服力的方式,但可能只有两个正则表达式:

(?<=Genre: ).*(?=(, \d{4}))|(?<=Genre: ).*

如果我是对的,那么第一个将匹配数字的情况,但如果失败,它将落入更一般的情况。

编辑:实际上,可能会执行以下操作:

(?<=Genre: ).*?(?=(, \d{4})|$)

这样.*并不贪心,但必须消耗所有数字或字符串结尾的所有内容。