Return下一个第n个结果全局连字符后\w+
Return the next nth result \w+ after a hyphen globally
刚刚进入理解正则表达式的下一阶段,希望社区能提供帮助...
字符串=These.Final.Hours-AUSVERSION.2013-TEST-TESTAGAIN-YIFY.cp(tt123456).MiLLENiUM.mp4
有多个测试名称前面有我从正则表达式派生的“-”连字符
\(?<=-)\w+\g
结果:
- AUSVERSION
- 测试
- 测试
- 一飞
我可以使用正则表达式的贪婪分析最后的结果 \(?!.*-)(?<=-)\w+\g
结果:
- YIFI(第 4 个也是最后一个结果)
你能帮我使用相同的字符串全局解析第一个、第二个或第三个结果吗?
在 Python 中,您可以使用简单的 -\s*(\w+)
正则表达式和 re.findall
获得这些匹配项,然后访问具有适当索引的任何匹配项:
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*(\w+)
模式搜索连字符,后跟 0+ 个空格,然后捕获 1+ 个数字、字母或下划线。 re.findall
仅 returns 使用捕获组捕获的文本,因此您只能获得使用 (\w+)
.
捕获的组 1 值
要一一得到这些匹配项,用re.search
,可以用^(?:.*?-\s*(\w+)){n}
,其中n就是你想要的匹配索引。这里有一个regex demo.
A quick Python demo(在实际代码中,分配 re.search
的结果,并在检查是否匹配后才访问第 1 组值):
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))
模式说明:
^
- 字符串开头
(?:.*?-\s*(\w+)){2}
- 匹配(此处)2 个序列的非捕获组:
.*?
- 0+ 除换行符以外的任何字符(因为没有使用 re.DOTALL
修饰符)直到第一个...
-
- 连字符
\s*
- 0 个或更多空格
(\w+)
- 第 1 组捕获 1 个以上的单词字符(字母、数字或下划线)。
刚刚进入理解正则表达式的下一阶段,希望社区能提供帮助...
字符串=These.Final.Hours-AUSVERSION.2013-TEST-TESTAGAIN-YIFY.cp(tt123456).MiLLENiUM.mp4
有多个测试名称前面有我从正则表达式派生的“-”连字符
\(?<=-)\w+\g
结果:
- AUSVERSION
- 测试
- 测试
- 一飞
我可以使用正则表达式的贪婪分析最后的结果 \(?!.*-)(?<=-)\w+\g
结果:
- YIFI(第 4 个也是最后一个结果)
你能帮我使用相同的字符串全局解析第一个、第二个或第三个结果吗?
在 Python 中,您可以使用简单的 -\s*(\w+)
正则表达式和 re.findall
获得这些匹配项,然后访问具有适当索引的任何匹配项:
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*(\w+)
模式搜索连字符,后跟 0+ 个空格,然后捕获 1+ 个数字、字母或下划线。 re.findall
仅 returns 使用捕获组捕获的文本,因此您只能获得使用 (\w+)
.
要一一得到这些匹配项,用re.search
,可以用^(?:.*?-\s*(\w+)){n}
,其中n就是你想要的匹配索引。这里有一个regex demo.
A quick Python demo(在实际代码中,分配 re.search
的结果,并在检查是否匹配后才访问第 1 组值):
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))
模式说明:
^
- 字符串开头(?:.*?-\s*(\w+)){2}
- 匹配(此处)2 个序列的非捕获组:.*?
- 0+ 除换行符以外的任何字符(因为没有使用re.DOTALL
修饰符)直到第一个...-
- 连字符\s*
- 0 个或更多空格(\w+)
- 第 1 组捕获 1 个以上的单词字符(字母、数字或下划线)。