用正则表达式解析公式名称和参数

时间:2016-04-11 23:53:41

标签: regex

this Regex (\w*)\s*\([(\w*),]*\)的目标是获取函数名称及其参数。

例如,给定f1 (11,22,33)

正则表达式应该捕获四个元素:

f1 11 22 33

这个正则表达式有什么问题?

2 个答案:

答案 0 :(得分:1)

您可以使用split执行此操作以下是javascript

中的示例
var ar = str.match(/\((.*?)\)/);
if (ar) {
  var result = ar[0].split(",");
}

参考:https://stackoverflow.com/a/13953005/1827594

答案 1 :(得分:0)

有些事情对正则表达很难: - )

正如上述评论者所说,“*”可能过于宽松。它意味着零或更多。所以foo(,,)也匹配。不太好。

(\w+)\s*\((\w+)(?:,\s*(\w+)\s*)*\)

这更接近你的想法。让我们打破它。

\w+   <-- The function name, has to have at least one character
\s*   <-- zero or more whitespace
\(    <-- parens to start the function call
(\w+) <-- at least one parameter
(?:)  <-- this means not to save the matches
,\s*  <-- a comma with optional space
(\w+) <-- another parameter
\s*   <-- followed by optional space

这是Python的结果:

>>> m = re.match(r'(\w+)\s*\((\w+)(?:,\s*(\w+)\s*)*\)', "foo(a,b,c)")
>>> m.groups()
('foo', 'a', 'c')

但是,这样的事情呢?

foo(a,b,c
    d,e,f)

??是的,它正在用正则表达式加速,你继续使用更丰富的解析工具。