regex=^(movie|tv) (.*) (?<=season )([0-9 ]+)
输入=tv game of thrones season 1 2 3
输出
tv
game of thrones season
1 2 3
期望输出
tv
game of thrones
1 2 3
https://regex101.com/r/wG3aM3/954
(.*)
捕获([0-9 ]+)
之前的所有字符串,如何防止它捕获([0-9 ]+)
之前的(?<=season )
。
第页。我不能仅仅否定";季节;来自CCD_ 7。即tv game of season season 1 2 3
应捕获tv
game of season
1 2 3
您可以使用
^(movie|tv)s*(.*?)(?:s+season)?(?:s+([0-9]+(?:s+[0-9]+)*))?$
请参阅regex演示。
详细信息
^
-字符串的开头(movie|tv)
-第1组:movie
或tv
s*
-零个或多个空白(.*?)
-第2组:除换行字符之外的任何零个或多个字符,尽可能少(?:s+season)?
-一个可选的非捕获组,匹配一个或多个后面跟有season
字符串的空白(?:s+([0-9]+(?:s+[0-9]+)*))?
-可选的非捕获组匹配s+
-一个或多个空白([0-9]+(?:s+[0-9]+)*)
-第3组:一个或多个数字后接零或多个空白字符的重复
$
—字符串结束
这个怎么样?
^(movie|tv) (.*) (?:season )([0-9 ]+)
这只是将前瞻(?<=季节(更改为非捕获组(?:季节(。在python中,这将是:
import re
text = "tv game of thrones season 1 2 3"
output = re.findall(r"^(movie|tv) (.*) (?:season )([0-9 ]+)", text)
print(output)
#output: [('tv', 'game of thrones', '1 2 3')]
正则圆括号的非捕获版本。匹配括号内的任何正则表达式,但组匹配的子字符串在执行匹配后无法检索或稍后在模式中引用。
请参阅https://docs.python.org/3/library/re.html