Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回下一个第n个结果\w+;在一个连字符之后_Python_Regex_Regex Lookarounds - Fatal编程技术网

Python 返回下一个第n个结果\w+;在一个连字符之后

Python 返回下一个第n个结果\w+;在一个连字符之后,python,regex,regex-lookarounds,Python,Regex,Regex Lookarounds,刚刚进入了解regex的下一个阶段,希望社区能提供帮助 string=这些.Final.Hours AUSVERSION.2013-TEST-TESTAGAIN-YIFY.cp(tt123456).MiLLENiUM.mp4 有多个测试名前面有一个“-”连字符,我从regex派生出来 \(?在Python中,您可以使用简单的-\s*(\w+)regex和re.findall获取这些匹配项,然后使用适当的索引访问任何匹配项: 见: -\s*(\w+)模式搜索连字符,后跟0+空格,然后捕获1+个数字

刚刚进入了解regex的下一个阶段,希望社区能提供帮助

string=
这些.Final.Hours AUSVERSION.2013-TEST-TESTAGAIN-YIFY.cp(tt123456).MiLLENiUM.mp4

有多个测试名前面有一个“-”连字符,我从regex派生出来
\(?在Python中,您可以使用简单的
-\s*(\w+)
regex和
re.findall
获取这些匹配项,然后使用适当的索引访问任何匹配项:

见:

-\s*(\w+)
模式搜索连字符,后跟0+空格,然后捕获1+个数字、字母或下划线。
re.findall
仅返回捕获组捕获的文本,因此您只能获取使用
(\w+)
捕获的组1值

要逐个获取这些匹配项,使用
re.search
,可以使用
^(?:.*-\s*(\w+){n}
,其中n是所需的匹配索引。下面是一个示例

A(在实数代码中,分配
re.search
的结果,并在检查是否存在匹配后仅访问组1的值):

图案说明

  • ^
    -字符串的开头
  • (?:.*-\s*(\w+){2}
    -一个非捕获组,匹配(此处)两个序列:
    • *?
      -0+除换行符以外的任何字符(因为没有使用
      re.DOTALL
      修饰符)直到第一个
    • -
      -连字符
    • \s*
      -0个或更多空格
    • (\w+)
      -第1组捕获1+个单词字符(字母、数字或下划线)

在Python中,您可以使用简单的
-\s*(\w+)
regex和
re.findall
获得这些匹配,然后使用适当的索引访问任何匹配:

见:

-\s*(\w+)
模式搜索连字符,后跟0+空格,然后捕获1+个数字、字母或下划线。
re.findall
仅返回捕获组捕获的文本,因此您只能获取使用
(\w+)
捕获的组1值

要逐个获取这些匹配项,使用
re.search
,可以使用
^(?:.*-\s*(\w+){n}
,其中n是所需的匹配索引。下面是一个示例

A(在实数代码中,分配
re.search
的结果,并在检查是否存在匹配后仅访问组1的值):

图案说明

  • ^
    -字符串的开头
  • (?:.*-\s*(\w+){2}
    -一个非捕获组,匹配(此处)两个序列:
    • *?
      -0+除换行符以外的任何字符(因为没有使用
      re.DOTALL
      修饰符)直到第一个
    • -
      -连字符
    • \s*
      -0个或更多空格
    • (\w+)
      -第1组捕获1+个单词字符(字母、数字或下划线)

您的意思是?或类似的东西,等等?第一、第二或第三个结果听起来不清楚。因此,只需使用
-\s*(\w+)
使用
re.findall
并使用必要的索引访问匹配项。请参阅。谢谢大家。如果我们回到基本问题,是否有任何方法可以在正则表达式中表示第二个或第三个结果本身,即在包含4个选项的结果列表中的结果{2}或结果{3}?是的,但这很少是您需要的。
^(?:.-\s*(\w+){4}
您的意思是?或类似的东西,等等?第一、第二或第三个结果听起来不清楚。因此,只需使用
-\s*(\w+)
使用
re.findall
并使用必要的索引访问匹配项。请参阅。谢谢大家。如果我们回到基本问题,是否有任何方法可以在正则表达式中表示第二个或第三个结果本身,即在包含4个选项的结果列表中的结果{2}或结果{3}?是的,但这很少是您需要的。
^(?:.-\s*(\w+){4}
import re
s = 'These.Final.Hours-AUSVERSION.2013-TEST-TESTAGAIN-YIFY.cp(tt123456).MiLLENiUM.mp4'
r = re.findall(r'-\s*(\w+)', s)
print(r[0]) # => AUSVERSION
print(r[1]) # => TEST
print(r[2]) # => TESTAGAIN
print(r[3]) # => YIFY
s = "These.Final.Hours-AUSVERSION.2013-TEST-TESTAGAIN- YIFY.cp(tt123456).MiLLENiUM.mp4"
print(re.search(r'^(?:.*?-\s*(\w+))', s).group(1))
print(re.search(r'^(?:.*?-\s*(\w+)){2}', s).group(1))
print(re.search(r'^(?:.*?-\s*(\w+)){3}', s).group(1))
print(re.search(r'^(?:.*?-\s*(\w+)){4}', s).group(1))