4

我有一个包含 Excel 公式的字符串。如何从字符串中解析出每个特定的函数名?

我不知道如何为此编写正则表达式。基本上它必须是 a ( 之前的字符串,而不是单引号或双引号。

例如:

  1. =VLOOKUP($A9,'Summary'!$A$10:$C$30,3,FALSE)- 应该返回VLOOKUP

  2. =IFERROR((C10/B10),"N/A")- 应该返回IFERROR

  3. ='New Chart Data (Date)'!L70- 应该什么都不返回,因为没有函数

  4. =IFERROR((C10/B10),Len(E30))- 应该返回IFERROR并且LEN

  5. ='New Chart Data(Date)'!L70 + Len(5)- 应该返回Len。这是一个棘手的问题。很多东西也会返回Data,这是错误的。

有任何想法吗?

提前致谢。

4

2 回答 2

2

我猜你可以使用这样的东西......

(?<=[=,])[A-Za-z2]+(?=\()

regex101 演示(带有正则表达式的描述)

实际上,有一个问题:诸如=IFERROR((C10/B10), Len(E30))won't get之类的公式Len。您可以改用这个并修剪任何空格(如果有):

(?<=[=,])\s*[A-Za-z2]+(?=\()

或者因为 C# 接受可变长度的lookbehinds ...

(?<=[=,]\s*)[A-Za-z2]+(?=\()

我认为这比以前需要更多的资源。

编辑:我没有想到工作表名称可以采用=Sheet(2)例如的形式='=Sheet(2)'!A1

(?<=[=,])\s*[A-Za-z2]+(?=\()(?![^']*'!)

修改正则表达式101

EDIT2:也忘记了运算符...我想我会使用像安迪这样的单词边界,因为唯一的问题是

\b[A-Za-z2]+(?=\()(?![^']*'!)

更新正则表达式101

于 2013-09-04T19:26:42.733 回答
1

我认为它可以被简化,使用断词\b而不是回顾:

\b([A-Za-z2]+)(?=\()
于 2013-09-04T19:35:47.063 回答