正则表达式可在多种情况下(续)匹配版权声明中的公司名称

时间:2019-03-20 15:32:50

标签: python regex

我今天Regex to match company names from copyright statements under several conditions发布了这个问题,以使公司名称脱离版权声明,而我得到的此正则表达式对于这些声明确实适用:

(?i)(?:©(?:\s*Copyright)?|Copyright(?:\s*©)?)\s*\d+(?:\s*-\s*\d+)?\s*(.*?(?=\W*All\s+rights\s+reserved)|[^.]*(?=\.)|.*)

但是,现在我遇到一个例外:公司名称在年份之前注明:

  

版权所有©Zinrelo,2019年。保留所有权利。

我的第一个想法是,不了解很多正则表达式,却试图建立一个替代性的正则表达式模式,第一个不起作用,我想出了这一点:

(?:©(?:\s*Copyright)?|Copyright(?:\s*©)?)\s*(.*?(\d+(?:\s*-\s*\d+)?)|.*)

尽管看起来似乎不太好,但我得到了两场比赛:“ Zinrelo,2019”和“ 2019”。有没有办法我可以更改第一个正则表达式模式以适应这种例外情况(年份在公司名称之后)?如果没有,我想出的正则表达式模式在做什么?

1 个答案:

答案 0 :(得分:0)

您可以使用此模式来捕获和替换不需要的文本,而最终得到所需的公司名称,而这些公司可能需要其他正则表达式来修剪不需要的字符的边缘。

^.*?©|Copyright|(?:19|20)\d\d|All rights reserved.*$

Demo

^               # Start of string/line
.               # Any character except line break
*?              # (zero or more)(lazy)
©               # "©"
|               # OR
Copyright           # "Copyright"
|               # OR
(?:             # Non Capturing Group
  19            # "19"
  |             # OR
  20            # "20"
)               # End of Non Capturing Group
\d              # <digit 0-9>
\d              # <digit 0-9>
|               # OR
All rights reserved     # "All rights reserved"
.               # Any character except line break
*               # (zero or more)(greedy)
$               # End of string/line