如何只使用模式中的输入一次



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应捕获tvgame of season1 2 3

您可以使用

^(movie|tv)s*(.*?)(?:s+season)?(?:s+([0-9]+(?:s+[0-9]+)*))?$

请参阅regex演示。

详细信息

  • ^-字符串的开头
  • (movie|tv)-第1组:movietv
  • 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

最新更新