我有以下字串,它將成為檔案名的一部分。[Cast1, Cast2, Cast 3],這個字串是逗號分隔的。它會在電影片名的結尾,前面有一個 - 或 ~
檔案名看起來像這樣
(Studio) - Title (Year) ~ [Cast1, Cast2, Cast 3]粗體部分可以是可選的
我需要一個正則運算式來獲得以下內容,我知道這可以通過字串拆分來完成,但我需要在正則運算式中
- 演員1
- 演員2
- 演員 3
我希望它在一個命名組中,到目前為止我有((?P<CAST>([^,] )))
但它包括左括號和右括號。
最重要的是
uj5u.com熱心網友回復:
如果我了解您在尋找什么,請嘗試:
[-~]\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
但這能給你帶來什么?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/428066.html
標籤:正则表达式 python-2.7
