我的计划很紧,想出一个python正则表达式来匹配许多可能的不同版权声明中的公司名称,例如:
Copyright © 2019 Apple Inc. All rights reserved. © 2019 Quid, Inc. All Rights Reserved. © 2009 Database Designs © 2019 Rediker Software, All Rights Reserved ©2019 EVOSUS, INC. ALL RIGHTS RESERVED © 2019 Walmart. All Rights Reserved. © Copyright 2003-2019 Exxon Mobil Corporation. All Rights Reserved. Copyright © 1978-2019 Berkshire Hathaway Inc. © 2019 McKesson Corporation © 2019 UnitedHealth Group. All rights reserved. © Copyright 1999 - 2019 CVS Health Copyright 2019 General Motors. All Rights Reserved. © 2019 Ford Motor Company ©2019 AT&T Intellectual Property. All rights reserved. © 2019 GENERAL ELECTRIC Copyright ©2019 AmerisourceBergen Corporation. All Rights Reserved. © 2019 Verizon © 2019 Fannie Mae Copyright © 2018 Jonas Construction Software Inc. All rights reserved. All Comments © Copyright 2017 Kroger | The Kroger Co. All Rights Reserved © 2019 Express Scripts Holding Company. All Rights Reserved. 1 Express Way, St. Louis, MO 63121 © 2019 JPMorgan Chase & Co. Copyright © 1995 - 2018 Boeing. All Rights Reserved. © 2019 Bank of America Corporation. All rights reserved. © 1999 - 2019 Wells Fargo. All rights reserved. NMLSR ID 399801 ©2019 Cardinal Health. All rights reserved.
我所知道的正则表达式只是非常基本的内容,目前还不足以快速提出一个好的解决方案。
从我看来,至少对于这些示例,正确捕获公司名称的要求如下:
If there's a '©' or 'Copyright' in the sentence: After '©' or 'Copyright' - look for a year, e.g. '2019', or a year range, e.g. '1995 - 2018' or '2003-2019' (spaces are to catch as well]): If there's a dot somewhere after this year/year range, capture the text until the dot. E.g. in 'Copyright © 1978-2019 Berkshire Hathaway Inc.' capture 'Berkshire Hathaway Inc' If there's no dot but there's the sentence 'All rights reserved', capture from the year/year range until there and also ignore any possible non-alphanumeric characters that precede it, such as spaces and commas. E.g. from '© 2019 Rediker Software, All Rights Reserved' capture 'Rediker Software' If there's no dot nor the sentence 'All rights reserved', capture from the year/year range until the end. E.g. from '© 2019 Verizon' Capture 'Verizon'
关于好的正则表达式有什么建议吗?
您可以考虑使用正则表达式
(?i)(?:©(?:\s*Copyright)?|Copyright(?:\s*©)?)\s*\d+(?:\s*-\s*\d+)?\s*(.*?(?=\W*All\s+rights\s+reserved)|[^.]*(?=\.)|.*)
请参阅regex演示。使用不区分大小写的修饰符re.I。
re.I
细节
(?:©(?:\s*Copyright)?|Copyright(?:\s*©)?)
©(?:\s*Copyright)?
©
Copyright
|
Copyright(?:\s*©)?
\s*
\d+
\d{4}
(?:\s*-\s*\d+)?
-
(.*?(?=\W*All\s+rights\s+reserved)|[^.]*(?=\.)|.*)
.*?(?=\W*All\s+rights\s+reserved)
All rights reserved
[^.]*(?=\.)
.
.*
Python演示:
import re s = "Copyright © 2019 Apple Inc. All rights reserved.\r\n© 2019 Quid, Inc. All Rights Reserved.\r\n© 2009 Database Designs \r\n© 2019 Rediker Software, All Rights Reserved\r\n©2019 EVOSUS, INC. ALL RIGHTS RESERVED\r\n© 2019 Walmart. All Rights Reserved.\r\n© Copyright 2003-2019 Exxon Mobil Corporation. All Rights Reserved.\r\nCopyright © 1978-2019 Berkshire Hathaway Inc.\r\n© 2019 McKesson Corporation\r\n© 2019 UnitedHealth Group. All rights reserved.\r\n© Copyright 1999 - 2019 CVS Health\r\nCopyright 2019 General Motors. All Rights Reserved.\r\n© 2019 Ford Motor Company\r\n©2019 AT&T Intellectual Property. All rights reserved.\r\n© 2019 GENERAL ELECTRIC\r\nCopyright ©2019 AmerisourceBergen Corporation. All Rights Reserved.\r\n© 2019 Verizon\r\n© 2019 Fannie Mae\r\nCopyright © 2018 Jonas Construction Software Inc. All rights reserved.\r\nAll Comments © Copyright 2017 Kroger | The Kroger Co. All Rights Reserved\r\n© 2019 Express Scripts Holding Company. All Rights Reserved. 1 Express Way, St. Louis, MO 63121\r\n© 2019 JPMorgan Chase & Co.\r\nCopyright © 1995 - 2018 Boeing. All Rights Reserved.\r\n© 2019 Bank of America Corporation. All rights reserved.\r\n© 1999 - 2019 Wells Fargo. All rights reserved. NMLSR ID 399801\r\n©2019 Cardinal Health. All rights reserved.\r\n© 2019 Quid, Inc All Rights Reserved." rx = r"(?:©(?:\s*Copyright)?|Copyright(?:\s*©)?)\s*\d+(?:\s*-\s*\d+)?\s*(.*?(?=\W*All\s+rights\s+reserved)|[^.\n]*(?=\.)|.*)" for m in re.findall(rx, s, re.I): print(m)
输出:
Apple Inc Quid, Inc Database Designs Rediker Software EVOSUS, INC Walmart Exxon Mobil Corporation Berkshire Hathaway Inc McKesson Corporation UnitedHealth Group CVS Health General Motors Ford Motor Company AT&T Intellectual Property GENERAL ELECTRIC AmerisourceBergen Corporation Verizon Fannie Mae Jonas Construction Software Inc Kroger | The Kroger Co Express Scripts Holding Company JPMorgan Chase & Co Boeing Bank of America Corporation Wells Fargo Cardinal Health Quid, Inc