如何用正则表达式提取文本文件中的股票代码?
提取股票代码的正则表达式方案
方案一:基于字段位置精准匹配
观察文本结构,股票代码是每行(表头除外)的第二个字段,紧跟公司名称之后、数字持股数之前,可用以下正则:
^.*?\s+([A-Z]{1,5}(?:DF)?)\s+\d+[,]?\d+
- 细节说明:
^.*?\s+:非贪婪匹配行首到股票代码前的所有内容,避免过度占用字符([A-Z]{1,5}(?:DF)?):捕获核心股票代码,支持1-5位大写字母,可选DF后缀(适配BYDDF这类特殊代码)\s+\d+[,]?\d+:匹配代码后的空格及带逗号的数字持股数,确保定位的是正确字段
方案二:基于代码特征全局匹配
如果文本格式存在变动风险,可直接匹配符合特征的股票代码,同时排除表头的"Symbol":
\b(?!Symbol\b)[A-Z]{1,5}(?:DF)?\b
- 细节说明:
\b:利用单词边界确保匹配独立的代码,避免匹配公司名称中的大写片段(?!Symbol\b):负向预查过滤表头的"Symbol"字符串[A-Z]{1,5}(?:DF)?:覆盖所有出现的股票代码格式
实际使用示例(Python)
确保开启多行模式以匹配每行内容:
import re raw_text = """Symbol Holdings Stake Mkt. price Value Pct of portfolio Ally Financial Inc ALLY 29,000,000 9.6% $25.59 $742,110,000 0.2% Amazon.com, Inc. AMZN 10,551,000 0.1% $137.09 $1,446,436,590 0.4% American Express Company AXP 151,610,700 20.8% $149.79 $22,709,766,753 6.7% Aon PLC AON 4,335,000 2.1% $315.64 $1,368,299,400 0.4% Apple Inc AAPL 915,560,382 5.9% $176.54 $161,633,029,838 47.4% Bank of America Corp BAC 1,032,852,006 13.0% $27.25 $28,145,217,164 8.3% BYD Co. Ltd BYDDF 98,603,142 9.0% $30.11 $2,968,940,606 0.9% Capital One Financial Corp. COF 12,471,030 3.3% $103.99 $1,296,862,410 0.4% Celanese Corporation CE 5,358,535 4.9% $115.37 $618,214,183 0.2% Charter Communications Inc CHTR 3,828,941 2.6% $409.20 $1,566,802,657 0.5% Chevron Corporation CVX 123,120,120 6.5% $147.07 $18,107,276,048 5.3% Citigroup Inc C 55,244,797 2.9% $40.83 $2,255,645,062 0.7% Coca-Cola Co KO 400,000,000 9.3% $56.98 $22,792,000,000 6.7%""" # 使用方案一的正则提取 pattern = r'^.*?\s+([A-Z]{1,5}(?:DF)?)\s+\d+[,]?\d+' stock_codes = re.findall(pattern, raw_text, re.MULTILINE) print(stock_codes)
执行后会输出完整的股票代码列表:['ALLY', 'AMZN', 'AXP', 'AON', 'AAPL', 'BAC', 'BYDDF', 'COF', 'CE', 'CHTR', 'CVX', 'C', 'KO']
内容的提问来源于stack exchange,提问作者Mahmoud Abdel-Rahman
相关产品推荐
相关产品推荐

