【发布时间】:2021-10-02 18:33:04
【问题描述】:
问题介绍
所以我一直在努力尝试消极地看待工作前后的事情。对于最后一个示例输入,我当前的解决方案不返回匹配项(请参阅预期输出表)。我正在努力解决如何匹配字符串的title 部分,因为它包含不在字符串末尾的年份。需要明确的是,我只对匹配位于字符串末尾的year 感兴趣。当前正则表达式在最后一个示例中失败,因为它匹配 title 中的 NOT("Q" OR "\d*")。但是,我只希望它匹配NOT("Q" AND "\d{1}")。非常感谢任何提示/建议。注意使用 Python 3.8。
输入示例
AXP - Earnings call Q2 2021
AXP - Conference call 2021
BAC,BAC.PE,BAC.PL,BACRP,BML.PL,BML.PJ,BML.PH,BML.PG,BAC.PB,BAC.PK,BAC.PM,BAC.PN - Earnings call Q2 2021
GM - General Motors Company (GM) Presents at Deutsche Bank AutoTech Conference
AXP - American Express Company (AXP) Management Presents at Barclays 2020 Global Financial Services Conference
period 将始终采用 Q[1-4] 的形式。 period 和 year 是可选的。如果它们确实发生,它们将位于字符串的末尾。 symbol 和 title 始终由 - 分隔并始终出现。
预期输出
| symbol | title | period | year |
|---|---|---|---|
| AXP | Earnings call | Q2 | 2021 |
| AXP | Conference call | 2021 | |
| BAC | Earnings call | Q2 | 2021 |
| GM | General Motors Company (GM) Presents at Deutsche Bank AutoTech Conference | ||
| AXP | American Express Company (AXP) Management Presents at Barclays 2020 Global Financial Services Conference |
我的尝试
r"^(?P<symbol>[^\,]{1,8})(\,[A-Z\.]+)*\s\-\s(?P<title>[^Q\d]*)\s?(?P<period>Q\d)?\s?(?P<year>19|20\d{2})$"
【问题讨论】:
标签: python regex regex-negation