You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python re.findall正则无法匹配所有目标子串反而返回整段字符串问题

问题原因分析
  • 原正则运算符优先级错误:| 优先级低于后续匹配规则,原表达式实际等价于匹配 NASDAQ 或者 NYSE.*:.*\)$,导致单独的NASDAQ关键词会被直接提取,没有匹配后续完整内容
  • 贪婪匹配问题:.* 会尽可能匹配最长的符合规则的内容,所以NYSE.*:.*\)$会直接匹配到整个字符串末尾的右括号,把多个括号的内容合并成一个结果
  • 直接将原字符串转大写会丢失原本的大小写格式,无法得到和预期一致的大小写结果
修正后的代码
import re

txt = "(NASDaq/abnjnxd:number1) ojsnxsjsxmjosx (nasDaq:number2) (NYSE:bhdnd) (Nasdaq:eres)"

# 正则添加忽略大小写标志,用排除类匹配避免越界
x = re.findall(r"\(((?:NASDAQ|NYSE)[^:)]*:[^)]*)\)", txt, flags=re.IGNORECASE)

print(x)
正则规则说明
  • \( 匹配内容最外层的左括号
  • 外层捕获组内的内容就是我们要提取的目标,re.findall 会直接返回所有捕获组的匹配结果
  • (?:NASDAQ|NYSE) 非捕获组,匹配开头的市场标识,加re.IGNORECASE后不区分大小写
  • [^:)]* 匹配冒号、右括号之外的任意字符,覆盖/abnjnxd这类可选后缀
  • : 匹配内容中的冒号分隔符
  • [^)]* 匹配右括号之外的任意字符,覆盖number1这类值内容
  • \) 匹配内容最外层的右括号

运行后输出:

['NASDaq/abnjnxd:number1', 'nasDaq:number2', 'NYSE:bhdnd', 'Nasdaq:eres']

内容的提问来源于stack exchange,提问作者drake1994

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:09:04