如何使正则表达式(?<=NASDAQ:).*查询返回无重复的唯一匹配结果
问题原因
你当前使用的正则(?<=NASDAQ:).*会匹配所有带有NASDAQ:前缀的后续整行内容,若开启了全局匹配(g标志),所有命中项都会被返回,包含重复的股票代码值。同时.*是贪婪匹配,会匹配到行尾所有内容,也可能因为匹配范围过大引入重复误判。
解决方案
方案1:仅保留第一个匹配结果
如果只需要获取全文第一个符合要求的股票代码,直接关闭正则的**全局匹配(g标志)**即可,正则匹配到第一个结果后会直接停止,不会返回后续重复内容。
方案2:匹配所有不重复的股票代码
如果需要提取全文所有不重复的股票代码,相同值仅保留一次,推荐两种实现方式:
- 最简稳妥方案:先将原正则优化为
(?<=NASDAQ:)\w+(精准匹配连续字母数字组成的股票代码,避免.*匹配多余内容),开启全局匹配拿到所有结果后,将结果存入Set自动去重,不需要编写复杂正则逻辑。 - 纯正则实现方案:使用带回溯校验的正则
(?<=NASDAQ:)(\w+)(?!.*\1),该正则会匹配NASDAQ:后的股票代码,且仅当后续文本没有出现过相同代码时才命中,保证每个代码仅返回一次。
内容的提问来源于stack exchange,提问作者DarkWingDuck
相关产品推荐
相关产品推荐

