我认为这很容易找到,但我没有成功。
我需要能够标记以下表达式
(4 + 5)+ myfunc('两个字',3,5)
到
(
4
+
5
+
myfunc
(
'two words'
,
3
,
5
)
这似乎是一个普遍的需求,但是我还没有找到任何关于此的好文档。这是我用正则表达式做的事吗?有人知道现有的方法吗?
我正在使用C#,但如果您有其他语言的答案,请不要害羞。
提前致谢。
答案 0 :(得分:0)
如果您正在寻找一个强大而强大的解决方案,那么您应该明确地研究一个词法分析器(如Antlr)。但是,如果您需要的只是对您提供的简单表达式进行标记化,则可以非常轻松地实现此结果:
// TODO Refactor and optimize this function
public IList<string> TokenizeExpression(string expr)
{
// TODO Add all your delimiters here
var delimiters = new[] { '(', '+', ')', ',' };
var buffer = string.Empty;
var ret = new List<string>();
expr = expr.Replace(" ", "");
foreach (var c in expr)
{
if (delimiters.Contains(c))
{
if (buffer.Length > 0) ret.Add(buffer);
ret.Add(c.ToString(CultureInfo.InvariantCulture));
buffer = string.Empty;
}
else
{
buffer += c;
}
}
return ret;
}
示例:
TokenizeExpression(“(4 + 5)+ myfunc('two words',3,5)”)Count = 14
[0]: "(" [1]: "4" [2]: "+" [3]: "5" [4]: ")" [5]: "+" [6]: "myfunc" [7]: "(" [8]: "'twowords'" [9]: "," [10]: "3" [11]: "," [12]: "5" [13]: ")"