匹配括号内的逗号分隔列表
Matching a Comma Separated List within Brackets
我有以下字符串作为文件名的一部分。
[Cast1, Cast2, Cast 3],该字符串以逗号分隔。它会在电影片名的末尾,并以 - 或 ~
开头
文件名如下所示
(工作室)- 标题(年份)~ [Cast1, Cast2, Cast 3] 粗体部分可以是可选的
我需要 REGEX 来获得以下内容,我知道这可以通过字符串拆分来完成,但我在 REGEX
中需要它
- 演员 1
- Cast2
- 演员表 3
我希望它在一个命名的组中,到目前为止我有 ((?P<CAST>([^,]+)))
但它包括左括号和右括号。
在此之上
如果我明白你在找什么,试试:
[-~]\s*\[(?P<CAST>[^\]]*)\]
[-~]
匹配“-”或“~”。
\s*
匹配零个或多个空白字符。
\[
匹配“[”。
(?P<CAST>[^\]]*)
匹配 0 个或多个 不是 ']' 的字符,并在命名捕获组 CAST 中捕获它们。
\]
匹配']'。
因此,无论这些字符是否包含逗号,以上内容都会捕获“-”或“~”之后的“[”和“]”字符之间的任何内容。不能有 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
但这给你带来了什么?
我有以下字符串作为文件名的一部分。 [Cast1, Cast2, Cast 3],该字符串以逗号分隔。它会在电影片名的末尾,并以 - 或 ~
开头文件名如下所示
(工作室)- 标题(年份)~ [Cast1, Cast2, Cast 3] 粗体部分可以是可选的
我需要 REGEX 来获得以下内容,我知道这可以通过字符串拆分来完成,但我在 REGEX
中需要它- 演员 1
- Cast2
- 演员表 3
我希望它在一个命名的组中,到目前为止我有 ((?P<CAST>([^,]+)))
但它包括左括号和右括号。
在此之上
如果我明白你在找什么,试试:
[-~]\s*\[(?P<CAST>[^\]]*)\]
[-~]
匹配“-”或“~”。\s*
匹配零个或多个空白字符。\[
匹配“[”。(?P<CAST>[^\]]*)
匹配 0 个或多个 不是 ']' 的字符,并在命名捕获组 CAST 中捕获它们。\]
匹配']'。
因此,无论这些字符是否包含逗号,以上内容都会捕获“-”或“~”之后的“[”和“]”字符之间的任何内容。不能有 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
但这给你带来了什么?