首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex Python中的可选组的匹配和管理

Regex Python中的可选组的匹配和管理
EN

Stack Overflow用户
提问于 2022-01-17 23:41:15
回答 1查看 24关注 0票数 1

我正在尝试匹配以下字符串(工作室)-电影(年份)-段号

字符串必须有以下的order,然后是薄膜,然后是可选的年份,最后是可选的(分段+数字)

工作室和电影必须是当前年份,可以选择分段类型(大小写不敏感),如果现在必须后面跟着一个数字从1到8段incle的类型

regex应匹配以下字符串(制片厂)

我尝试了下面的Regex

\((?P<STUDIO>.+)\) - (?P<TITLE>.+) \((?P<YEAR>\d{4})\)?( - (?P<SEGMENT>(?i)(cd|disc|disk|dvd|part|pt|scene) \b[1-8]\b))?

它给出了字符串(制片厂)- (1994) - cd 3的如下内容:

命名群

  • 演播室
  • 片名电影
  • 段cd 3
  • 1994年

(制片公司)-电影(1994年)

命名群

  • 演播室
  • 片名电影
  • 段无
  • 1994年

所以它的工作是因为段是可选的。

但是,当我使用以下正则表达式使年份为可选时:

\((?P<STUDIO>.+)\) - (?P<TITLE>.+)?( \((?P<YEAR>\d{4})\))??( - (?P<SEGMENT>(?i)(cd|disc|disk|dvd|part|pt|scene) \b[1-8]\b))?

最后我得出了这样的结果:

命名群

  • 演播室
  • 电影片名(1994)
  • 段无
  • 年份无

如果我将所有年份一起删除,使字符串类似于(制片厂)-file-CD3,我将得到以下内容:

命名群

  • 演播室
  • 胶卷- cd 3
  • 段无
  • 年份无

我需要的是:

命名群

  • 演播室
  • 片名电影
  • 段cd 3或无
  • 1994年或无
EN

回答 1

Stack Overflow用户

发布于 2022-01-18 09:13:33

您可以将模式写为

代码语言:javascript
复制
(?i)^\((?P<STUDIO>[^()]*)\) - (?P<TITLE>.+?)?(?: \((?P<YEAR>\d{4})\))?(?: - (?P<SEGMENT>cd|disc|disk|dvd|part|pt|scene) [1-8])?$
  • 字符串的^开始
  • \(匹配(
  • (?P<STUDIO>[^()]*)组工作室匹配字符( ()除外)
  • \) -匹配) -
  • (?P<TITLE>.+?)?组标题尽可能匹配1+字符
  • (?:非捕获组与匹配
    • \((?P<YEAR>\d{4})\)在组年和)中匹配(和4位数字

  • )?关闭非捕获组并使其成为可选的
  • (?:非捕获群
    • -匹配
    • (?P<SEGMENT>cd|disc|disk|dvd|part|pt|scene)组段匹配任何备选方案
    • [1-8]匹配一个空格和一个数字1-8。

  • )?关闭非捕获组并使其成为可选的
  • 字符串的$末端

Regex演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70748753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档