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

Scala正则表达式匹配大括号内容问题及特定匹配需求求助

解决类WML语言的正则token匹配问题

嘿,搞类WML模板解析呢?正则匹配这块卡壳太正常了,我帮你拆解下问题~

一、先搞定匹配第1、2、5、6个token的问题

我猜你大概率踩了正则特殊字符转义的坑!{和}在正则里是量词标记(比如{2,3}表示匹配2-3次),所以要匹配字面量的{{,必须对它们转义,写成\{\{(或者\{{2}},效果一致),同理}}要写成\}\}。如果直接写{{,正则引擎会把它当成语法错误或者无法正确识别,这就是你测试代码无输出的核心原因!

正确的正则表达式

如果你的token是{{xxx}}格式(xxx由字母、数字、下划线或连字符组成),用这个正则就能精准匹配所有符合格式的token:

\{\{[\w-]+\}\}
  • \{\{:匹配字面量的两个左大括号
  • [\w-]+:匹配一个或多个合法的token字符(如果需要支持其他字符,比如点号,改成[\w\-.]+即可)
  • \}\}:匹配字面量的两个右大括号

示例代码(以Python为例)

import re

# 假设你的测试文本是这样的
test_text = """{{user_name}} {{user_age}} plain_text [bad_token] {{order_id}} {{order_date}}"""
pattern = r"\{\{[\w-]+\}\}"
matches = re.findall(pattern, test_text)
print(matches)
# 输出:['{{user_name}}', '{{user_age}}', '{{order_id}}', '{{order_date}}']

这样就能匹配到你说的第1、2、5、6个token了。

二、如何仅匹配第1和第5个token?

这里分两种情况:

情况1:第1、5个token有特定模式

如果这两个token的名称有共同特征(比如第一个是{{user_*}},第五个是{{order_id}}),可以写组合正则直接匹配:

\{\{(user_.+|order_id)\}\}

这样就能精准命中符合这两种模式的token。

情况2:仅按出现顺序匹配第1和第5个

正则本身是基于模式匹配的工具,没法直接按位置计数匹配。这种情况要先找出所有符合格式的token,再通过代码提取对应位置的结果:

matches = re.findall(pattern, test_text)
# 取第1个(索引0)和第5个(索引4,因为列表是0开始计数)
target_tokens = [matches[0], matches[4]]
print(target_tokens)
# 输出:['{{user_name}}', '{{order_id}}']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:08:39