我有很多电影和很多复制品这些重复项有时没有相同的大小或全名我如何找到他们?

问题描述

我有很多电影,电视剧和动漫。有时我下载了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/测试正则表达式。在那里,您得到了解释,发现的内容以及原因。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...