2014-03-13 34 views
0

我试图创建一个提取标题,字幕和发布者的正则表达式。我想知道如何使字幕搜索可选。匹配字符串中的可选子字符串与正则表达式

我的格式是:

Title-(Subtitle)-[Publisher] 

其中:

  • 标题 - 是一个字符串,我想第一次拍摄组拍摄。
  • (小标题) - 是一个可选字符串,由括号括起来,我想在第2个捕获组中捕获 。
  • [发布者] - 是我想要在第3个捕获组中捕获的方括号包围的字符串。

例如:

Programming.in.Python.3-(A.Complete.Introduction.to.the.Python.Language)-[Addison-Wesley] 
Learning.Python-[O'Reilly] 
Flask.Web.Development-(Developing.Web.Applications.with.Python)-[O'Reilly] 

现在,我有一个正则表达式(see online),将捕获的第一和第三个:

(.*)-\((.*)\)-\[(.*)\] 

我的问题是,我不知道如果构造一个正则表达式,如果没有括起来的字幕,也会匹配第二行(第一组中的标题,第二组中应该是空的,第三组是发布者)。这可以在一个正则表达式中完成吗?

回答

3

只是要使用?

(.*?)-(?:\((.*?)\)-)?\[(.*?)\] 
     ^^^   ^^ 

而且我已经取代.*.*?第二撷取功能,避免贪婪。

+1

这是行不通的,除非你做出第一个'''''''''不贪心。 – bj0

+0

@ bj0是的,你是对的。非常感谢你。 –

+0

谢谢你的快速回答。它工作完美! :)另外,谢谢@ bj0一个很好的提示! – Scottie