Regexp验证版权

时间:2015-08-14 12:16:34

标签: python regex python-2.7

我正在创建一系列过滤器,以便验证包含版权的字符串,并且我很难找到合适的正则表达式来匹配它们。

字符串可以有两种方式:

// Copyright (c) YYYY - 2015.
// Copyright (c) 2015.

* YYYY可以指任何数字

我打算使用re.match()但是如果你有更好的建议,我也会很感激。

4 个答案:

答案 0 :(得分:1)

你去吧

// Copyright \(c\) \d{4}( - \d{4})?.

答案 1 :(得分:1)

怎么样?
import datetime, re
reg = re.compile(r'//\s*Copyright\s*\(c\)\s*([0-9]{4})(?:\s*\-\s*%d)?\.' % datetime.date.today().year, re.I)
reg.match('// copyright (c) 1997 -   2015').group(1)  # 1997

请注意我没有使用\d,因为它匹配的数字范围很广,不是0-9。

答案 2 :(得分:0)

这里的主要问题是版权格式。如果你将条件限制在你的答案中只有两行,那么它很容易,如上面的答案所示。

但如果你试图深入,你将面临多个问题。让我们重新制定任务:"对于给定的版权字符串A,定义A是否代表有效的版权行"。

首先,我们应该注意到,根据US Copyright law,如果您使用版权声明(请注意,这不是必需的!),那么您应该使用以下所有三个:

  1. 版权符号,或"版权所有"单词或简短版本" Copr。"
  2. 首次出版的年份(或几年)。因此所有这些都是有效的年份:" 2015"," 2010-2015"," 2005,2009,2010-2013,2015"
  3. 版权所有者的名称。
  4. 事实上,这三个可以按任何顺序排列。我假设在完整形式下,使用regexp解决此任务几乎是不可能的。但是,即使你用破折号将一年或两年分开,它仍然是非常复杂的正则表达式。

    其次,即使您已经编写了完善的版权检测器",当您将其应用于您要检查的文件\行时,是否会感到惊讶。因为如果您不是检查几个文件\行,而是数万个,您会看到内容创建者通常不关心格式。从不使用版权所有者名称("版权所有(C)2015")以及使用附加通知("保留所有权利。")等简单问题开始,更改字母大小写("版权"或"版权所有"),不同年份写作(" 2010 2015" w \ o dash,"(2010)(2015)&# 34; OMG," 2010 - 2015"有额外的空间等)和许多其他案例。

答案 3 :(得分:0)

简单的方法是:

导入重新

re_copyright = re.compile(r' copyright(([[Cc @])| \ d +)。*',re.IGNORECASE) re_copyright.match(文本)

上述正则表达式应该可以从文本变量中获取任何版权声明。