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

如何用正则匹配指定倍率ATK加成且排除中间含数字的情况?

解决正则错误匹配跨倍数的问题

问题分析

你遇到的核心问题是原正则里的.+属于贪婪匹配,它会从ATK后面开始尽可能多地抓取字符,直到找到最后一个by 1.5x——这就直接跨过了文本里的2.75x,错误匹配到了整个长句子。我们需要做的是:确保ATK和目标的by 1.5x之间,不会出现其他类似2.75x、2.5x的倍数格式。

解决方案:负向预查限制中间内容

这里推荐用**负向预查(Negative Lookahead)**来约束ATK到by 1.5x之间的内容,从根源上避免跨倍数的错误匹配。

正则写法1:禁止中间出现任何「数字+x」格式

Boosts (their )?ATK(?:(?!\d+\.?\d*x).)*by 1.5x
  • 拆解解释:
    • (?:(?!\d+\.?\d*x).)*:这是一个原子组,作用是匹配任意字符,但前提是当前位置之后不会出现「整数/小数+x」的倍数模式。
      • (?!\d+\.?\d*x):负向预查,检查当前位置后面没有1.23x这类倍数格式;
      • .:匹配任意单个字符;
      • *:重复这个检查+匹配的过程,直到遇到by 1.5x。

正则写法2:更严格,禁止中间出现「by + 倍数」完整结构

如果你的场景里,错误匹配都是因为中间存在另一个by Xx的加成项,可以用更精准的规则:

Boosts (their )?ATK(?:(?!by \d+\.?\d*x).)*by 1.5x

这个写法会确保ATK和目标by 1.5x之间,不会出现另一个完整的「by + 倍数」表述,完全杜绝跨加成项的错误匹配。

测试效果

用你的目标文本测试这两个正则:

Boosts ATK of Cerebral characters by 2.75x and chain by 1.5x if HP is below 30% at the start of the turn, boosts ATK of Cerebral characters by 2.5x otherwise

正则会因为中间存在2.75x(或by 2.75x)而拒绝匹配,完全符合你的需求;而如果遇到类似Boosts ATK of Cerebral characters by 1.5x的文本,会正常匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:07:31