使用正则表达式匹配字符串中间的可选子字符串

时间:2014-03-13 16:43:14

标签: python regex

我正在尝试创建一个用于提取标题,副标题和发布者的正则表达式。我想知道如何使字幕搜索可选。

我的格式是:

Title-(Subtitle)-[Publisher]

其中:

  • 标题 - 是我想在第一个捕获组中捕获的字符串。
  • (字幕) - 是一个可选字符串,由我想要的括号括起来 捕获在第二个捕获组。
  • [发布者] - 是一个用方括号括起来的字符串,我希望在第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)将捕获第一个和第三个:

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

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

1 个答案:

答案 0 :(得分:3)

只需使用?

选择第二次捕获即可
(.*?)-(?:\((.*?)\)-)?\[(.*?)\]
       ^^^         ^^

此外,我已将.*替换为.*?以避免贪婪。