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

如何用Regex匹配包含指定关键词的<>间文本?

正则表达式匹配含指定关键词的尖括号内容

没问题,我来帮你搞定这个正则需求!根据你要匹配尖括号<>之间且包含指定关键词的需求,我分两种常见场景给你对应的方案:

场景1:匹配至少包含其中一个关键词的内容

如果你只需要尖括号里的文本包含word1/word2/word3中的任意一个,用这个正则就够了:

<[^>]*?(word1|word2|word3)[^>]*?>

正则各部分解释:

  • <:精准匹配左尖括号
  • [^>]*?:非贪婪匹配任意数量的非>字符(避免一次性匹配多个尖括号内容)
  • (word1|word2|word3):匹配任意一个指定关键词,括号是分组,方便后续提取关键词本身或者验证
  • [^>]*?:继续匹配剩下的非>字符,直到遇到右尖括号
  • >:精准匹配右尖括号

Python代码示例:

import re

# 测试文本
text = "<test word1 example> <no match here> <word2 is good> <word3 test case>"
# 正则模式
pattern = r"<[^>]*?(word1|word2|word3)[^>]*?>"
# 获取所有完整匹配的尖括号内容
full_matches = [match.group() for match in re.finditer(pattern, text)]

print(full_matches)
# 输出结果: ['<test word1 example>', '<word2 is good>', '<word3 test case>']

场景2:匹配同时包含所有关键词的内容(忽略顺序)

如果你要求尖括号里的文本必须同时包含word1、word2、word3三个关键词(不管顺序),就需要用到正向预查来做多重验证:

<(?=[^>]*?word1)(?=[^>]*?word2)(?=[^>]*?word3)[^>]*>

正则各部分解释:

  • <:左尖括号
  • (?=[^>]*?word1):正向预查,确保在右尖括号之前存在word1
  • (?=[^>]*?word2):同理,确保存在word2
  • (?=[^>]*?word3):确保存在word3
  • [^>]*:匹配所有非>字符直到右尖括号
  • >:右尖括号

Python代码示例:

import re

# 测试文本
text = "<word1 word2 word3 ok> <word1 only> <word2 word3 missing1> <word3 word1 word2 mixed>"
# 正则模式
pattern = r"<(?=[^>]*?word1)(?=[^>]*?word2)(?=[^>]*?word3)[^>]*>"
# 获取所有完整匹配的内容
full_matches = [match.group() for match in re.finditer(pattern, text)]

print(full_matches)
# 输出结果: ['<word1 word2 word3 ok>', '<word3 word1 word2 mixed>']

注意事项:

  • 如果你的关键词包含正则特殊字符(比如., *, +等),记得要加反斜杠转义,比如关键词是word.1,就要写成word\.1
  • 以上方案默认尖括号没有嵌套(比如<a <b word1>>这种嵌套结构),正则本身不擅长处理嵌套,遇到这种情况建议用专门的HTML/XML解析器更靠谱
  • 非贪婪匹配*?很重要,能避免把多个独立的尖括号内容当成一个匹配项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:50:10