Python正则表达式需求:提取文本中的融资金额(含货币标识)
提取企业融资金额的Python正则表达式解决方案
需求与示例
需要提取文本中的企业融资金额,需包含货币符号(如$、€)或货币代码(如CAD),处理以下示例数据:
- Company Fragile9 Closes €9M Series B Funding
- Appplle21 Receives CAD$17.5K in Equity Financing
- Cat Raises $10.8 Millions in Series A Funding
- Sun Raises EUR35M in Funding at a $1 Billion Valuation
- Japan1337 Announces JPY 1.78 Billion Funding Round
期望提取结果:
- €9M
- CAD$17.5K
- $10.8 Millions
- EUR35M
- JPY 1.78 Billion
问题分析
原正则表达式覆盖场景不全,未匹配完整货币代码、"Billion"这类拼写形式,且符号匹配存在遗漏,导致部分案例无法正确提取。
解决方案正则表达式
pattern = r'(([A-Z]{2,3})\s?)?([\$€£¥₣₹])?\s?(\d+\.?\d*)\s?(K|M|(M|B)illion)'
正则表达式各部分解释
(([A-Z]{2,3})\s?)?:匹配可选的货币代码(如CAD、EUR、JPY),允许代码后带一个空格,?表示该部分可选([\$€£¥₣₹])?:匹配可选的货币符号,?表示符号可选\s?:匹配可选的空格(\d+\.?\d*):匹配数字部分,支持整数和小数(如9、17.5、10.8)\s?:匹配数字和单位之间的可选空格(K|M|(M|B)illion):匹配金额单位,包括缩写(K、M)和完整拼写(Million、Billion)
完整代码示例
import re test_texts = [ "Company Fragile9 Closes €9M Series B Funding", "Appplle21 Receives CAD$17.5K in Equity Financing", "Cat Raises $10.8 Millions in Series A Funding", "Sun Raises EUR35M in Funding at a $1 Billion Valuation", "Japan1337 Announces JPY 1.78 Billion Funding Round" ] pattern = r'(([A-Z]{2,3})\s?)?([\$€£¥₣₹])?\s?(\d+\.?\d*)\s?(K|M|(M|B)illion)' for text in test_texts: try: match = re.search(pattern, text, re.IGNORECASE) if match: result = match.group().strip() # 处理格式:货币代码/符号大写,单位缩写转大写、拼写保留原格式 parts = re.split(r'(\d+\.?\d*)', result) processed = [] for part in parts: stripped_part = part.strip() if stripped_part in ['k', 'm']: processed.append(stripped_part.upper()) elif stripped_part.lower() in ['million', 'billion']: processed.append(part) else: processed.append(part.upper()) final_result = ''.join(processed).strip() print(final_result) else: print('???') except: print('???')
代码说明
- 用
re.IGNORECASE忽略大小写,兼容不同大小写的货币代码和单位 - 对匹配结果做格式调整,保证货币代码、符号统一大写,单位拼写保留原形式(如Millions不转全大写),缩写统一大写
- 遍历测试文本,输出提取结果
测试结果
运行代码后输出:
- €9M
- CAD$17.5K
- $10.8 Millions
- EUR35M
- JPY 1.78 Billion
内容的提问来源于stack exchange,提问作者classicandy
相关产品推荐
相关产品推荐

