例如,r'\b(?)?:(can)|(could))\b'和r'(\bcan\b)|(\bcould\b)'?

2024-04-16 20:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

r'\b(?:(can)|(could))\b'r'(\bcan\b)|(\bcould\b)'快得多。这是有意义的,因为第一种模式从单词边界开始,效率更高。令我困惑的是,对于我的关键字列表和文档,这两种模式生成的re.findall结果略有不同。更改代码可以加快匹配速度,但我无法复制以前的结果。你知道吗

这两种模式似乎与我相同,只是效率不同。我错过什么了吗?你知道吗

我的模式如下,可以找到HERE输入太大,无法发布。它们是包含数万个单词的txt文件。你知道吗

\b(?:(Anti-takeover (?:provisions|provision))|(Bank debt[s]?)|(Capital 
(?:expenditure|expenditures))|(Capital (?:lease|leases))|(Chapter 11)| 
(Chapter 7)|(Chapter 9)|(Collateral[s]?)|(Concentrated ownership[s]?)| 
(Covenant|covenants)|(Credit (?:facility|facilities))|(Credit rating[s]?)| 
(Credit risk[s]?)|(Debt burden[s]?)|(Decline in stock price[s]?)| 
(Default[s]?|defaulted)|(Defined Benefit[s]?)|(Dilution[s]?)|(Dividend[s]?)| 
(Downgrade[s]?)|(Family)|(Financial condition[s]?)|(Financing cost[s]?)| 
(Funded status)|(Illiquid market[s]?)|(Improvements)|(Indebtedness)|(Insider 
sales)|(Investment[s]? in equipment)|(Investment[s]? in plant[s]?)|(Lease 
(?:commitment|commitments))|(lease|leases|leasing)|(Leverage[s]?)| 
(Leveraged (?:lease|leases))|(Limited trading)|(Liquidity|Liquidities)| 
(Loan[s]?)|(Locked-in (?:lease|leases))|(Mandatory contribution[s]?)| 
(Maturity|maturities)|(Negative operating cash flow[s]?)|(New financing)|(? 
-i:O.P.E.B.)|(Obligations)|(?-i:OPEB)|(Operating losses)|(Penny stock[s]?)| 
(Postretirement[s]?)|(Rating[s]?)|(Refinance)|(Refinancing)|(Reinsurance)| 
(Renegotiation[s]?)|(Reorganization[s]?)|(Reserves)|(Revolver[s]?)|(Sale 
of productive assets)|(Stock market listing)|(Stock price 
(?:volatility|volatilities))|(Stock price drop[s]?)|(Underfunded 
 pensions)|(Underwriting)|(Volatility of operating results)|(Volatility of 
 revenues)|(Volatility of sales)|(Working capital[s]?))\b

我知道正则表达式并不优雅。它是由关键字列表生成的。有些关键字是混合形式的,如“provisions | provision”条款还是简单的“规定”会更好。我做了一些改变,但不是全部。 最初它是由:

re_fin = '|'.join(r'((?-i:\b{}\b))'.format(k) if k.upper() == k else 
        r'(\b{}\b)'.format(k) for k in keywords])

我发现它非常慢,并将其更改为以下内容(以显示所有步骤):

  patterns = [r"(?-i:{})".format(k) if k.upper() == k else r"({})".format(k) 
            for k in keywords]
  patterns = "|".join(patterns)
  patterns = r"\b(?:{})\b".format(patterns)

Tags: ofinformatstock模式关键字单词price
1条回答
网友
1楼 · 发布于 2024-04-16 20:18:34

我想,这是因为分组问题。你知道吗

图案=[r”(?-i:{}“.format(k)if k.upper()==k else r”({})”.format(k) [关键字中的k]

所有CAP关键字未分组,因此未被捕获关于芬德尔. (?-我:{})应该是(?-我:({})

相关问题 更多 >