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

Haskell正则匹配问题:提取<nARD>标签内容不符预期

解决Haskell正则提取所有捕获组内容的问题

针对你遇到的情况,要提取所有<nARD>标签内的内容,需要调整正则匹配的结果处理方式:

问题原因

  • 使用getAllTextMatches时,它会返回整个正则匹配的完整文本(也就是每个<nARD>...</nARD>标签),而非捕获组内的内容。
  • matchRegex仅会查找第一个匹配项,所以只能得到第一个标签内的abcd,无法获取后续的匹配结果。

解决方案

使用getAllMatches替代getAllTextMatches,它会返回每个匹配对应的捕获组列表,再从中提取目标捕获组即可:

import Text.Regex.Posix

extractNARDContent :: String -> [String]
extractNARDContent input = map (!! 1) $ getAllMatches (input =~ "<nARD>([a-zA-Z0-9?=-]*)</nARD>") :: [String]

-- 测试示例
main = print $ extractNARDContent "<a> <b> <nARD>abcd</nARD> </c> <nARD>pqrs</nARD>"
-- 输出:["abcd","pqrs"]

代码解释

  1. getAllMatches (input =~ regex)会返回一个[[String]]类型的结果:每个子列表对应一个匹配项,子列表的第一个元素是整个匹配的完整标签,第二个元素就是我们需要的捕获组内容(标签内的文本)。
  2. map (!! 1)遍历每个匹配的子列表,提取第二个元素(索引为1的捕获组),最终得到所有标签内的文本列表。

补充说明

如果你的正则表达式有多个捕获组,getAllMatches会返回包含所有捕获组的列表,按需提取对应索引的元素即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:10:03