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

如何修改正则表达式以完整匹配带任意字母变量的三角函数Token

正则表达式匹配完整的带变量三角函数Token

给定表达式:

-15*sin(h)**2+121*sin(h)-216

原正则会将sin(h)拆分为['sin', '(', 'h', ')'],无法把完整的三角函数调用作为单个Token输出。要实现将sin(h)、cos(x)这类带字母变量的三角函数匹配为单个Token,可按以下方式修改正则:

修改后的正则表达式

核心逻辑是优先匹配完整的三角函数调用结构,再匹配其他语法元素——利用正则从左到右的匹配优先级,避免拆分完整的函数调用。

import re

input_text = "-15*sin(h)**2+121*sin(h)-216"
# 匹配带单个字母变量的sin/cos/tan,或其他语法元素
tokens = re.findall(r"sin\([a-zA-Z]\)|cos\([a-zA-Z]\)|tan\([a-zA-Z]\)|\d|\w|\(|\)|\+|-|\*+", input_text.strip().lower())
print(tokens)

输出结果

['-', '15', '*', 'sin(h)', '*', '*', '2', '+', '121', '*', 'sin(h)', '-', '216']

扩展说明

如果需要支持多字母变量名(比如sin(theta)、cos(alpha)),只需将正则中的[a-zA-Z]替换为[a-zA-Z]+即可:

tokens = re.findall(r"sin\([a-zA-Z]+\)|cos\([a-zA-Z]+\)|tan\([a-zA-Z]+\)|\d|\w|\(|\)|\+|-|\*+", input_text.strip().lower())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:54:26