问题描述
我有很多电影,电视剧和动漫。有时我下载了1种动漫,过了一会儿,我忘记了我已经拥有动漫并重新下载了。我在电影,动漫和电视连续剧中都遇到同样的问题。它们占据了我硬盘上的大小。我有大约2.5 TB。我正在编写一个Python脚本,该脚本通过其名称的txt文件运行以查找相似之处并捕获名称不完全相同的公仔(我已经捕获了名称相同的公仔)。我可以使用正则表达式轻松地做到这一点。我决定从名称中删除所有不必要的块,例如编辑(盗版)电影的团队的名称,等等。现在我在使用正则表达式时遇到了麻烦:
regex=re.compile(r""" (#Container of all
(#general tag group
(\s|\.|\(|\[)?#before the tag
(#tags container
x0r|incomplete|mkv|blueray|brrip|x264
|
ac3|720p?|1080p?|sparks|legion|bdrip|hc
|
xvid|amiable|yts\sam|yts\slt|h264|hevc
|
web-dl|dc
)#tags container ending
(\s|\.|\)|\])?#after the tag
)#general tag ending
)#Container of all ending
""",re.I|re.VERBOSE)
代码是正确的,并且可以捕获正确的内容,但是当我运行此代码时:
searched="marwan (yts lt) (x0r) "
found=regex.findall(searched)
if found:
for f in found:
print(f" found it and here it is _{f}_")
else:
print("not found")
我明白了:
found it and here it is _('(yts lt)','(yts lt)','(','yts lt',')')_
found it and here it is _('(x0r)','(x0r)','x0r',')')_
那么为什么在开始时它两次捕获yts lt和x0r两次? ik可以捕获不同情况的条件,但是为什么要两次捕获相同的事物?
解决方法
问题在于您有多个(5)捕获组(由于(
和)
),并且因为您在开头有2个左括号,在结尾有2个右括号,所以您有在2个捕获组中具有相同的发现。
我非常喜欢regex,但是也许您应该使用简单的for循环或其他一些更简单的东西:
for rep in ["(yts lt)","(x0r)"]:
searched.replace(rep,"")
如果仍然要使用正则表达式,我建议您使用页面https://regex101.com/测试正则表达式。在那里,您得到了解释,发现的内容以及原因。