匹配括号内的逗号分隔列表

Matching a Comma Separated List within Brackets

我有以下字符串作为文件名的一部分。 [Cast1, Cast2, Cast 3],该字符串以逗号分隔。它会在电影片名的末尾,并以 - 或 ~

开头

文件名如下所示

(工作室)- 标题(年份)~ [Cast1, Cast2, Cast 3] 粗体部分可以是可选的

我需要 REGEX 来获得以下内容,我知道这可以通过字符串拆分来完成,但我在 REGEX

中需要它

我希望它在一个命名的组中,到目前为止我有 ((?P<CAST>([^,]+))) 但它包括左括号和右括号。

在此之上

如果我明白你在找什么,试试:

[-~]\s*\[(?P<CAST>[^\]]*)\]

See RegEx Demo

  1. [-~] 匹配“-”或“~”。
  2. \s* 匹配零个或多个空白字符。
  3. \[ 匹配“[”。
  4. (?P<CAST>[^\]]*) 匹配 0 个或多个 不是 ']' 的字符,并在命名捕获组 CAST 中捕获它们。
  5. \] 匹配']'。

因此,无论这些字符是否包含逗号,以上内容都会捕获“-”或“~”之后的“[”和“]”字符之间的任何内容。不能有 3 个同名的捕获组 CAST。如果您想要转换的各个组件,则必须使用字符串拆分来完成:

import re

s = '(Studio) - Title (Year) ~ [Cast1, Cast2, Cast 3]'
m = re.search(r'[-~]\s*\[(?P<CAST>[^\]]*)\]', s)
if m:
    cast = m.group('CAST')
    print re.split(r',\s*', cast)

打印:

['Cast1', 'Cast2', 'Cast 3']

如果你是 运行 Python 3,你可以从 PyPi 存储库安装 regex 模块,它比内置的 re 模块有更多的功能,然后你可以执行:

import regex

s = '(Studio) - Title (Year) ~ [Cast1, Cast2, Cast 3]'
for m in regex.finditer(r'(?:[-~]\s*\[|\G(?!\A))\K\s*(?P<CAST>[^,\]]*)(?:[,\]])', s):
    print(m['CAST'])

打印:

Cast1
Cast2
Cast 3

但这给你带来了什么?