首页 > 解决方案 > 正则表达式,提取变量名

问题描述

我处于需要从字符串(表达式)中提取单词/变量的情况。我试图做到这一点。以下情况有效:

OK/Test(ANSWER[12])+SUM(Test(ANSWER[..]))*OK+ANSWER[14] 

我需要提取“OK”“变量”。我设法提取了其他组件,例如 ANSWER[..] 例如,这些变量当然是动态的。

我已经尝试过类似的事情:

/[a-zA-Z]*(?!\(|\[)/g

但这也返回 SU(来自 SUM,这是不希望的)

提前致谢 :)

编辑:澄清

我需要提取仅由空格(字符串开头或结尾)或 +-*/ 运算符包围的单词。前面或后面有 ()[] 的单词应该被忽略。

标签: c#regex

解决方案


您可以使用

(?<![^\s+*/-])\w+(?![^\s+*/-])

查看正则表达式演示

细节

  • (?<![^\s+*/-])- 包含+-和的空白边界/*
  • \w+- 1+字字符
  • (?![^\s+*/-])- 包含+-和 的空白边界/*

C#示例代码:

var results = Regex.Matches(text, @"(?<![^\s+*/-])\w+(?![^\s+*/-])")
        .Cast<Match>()
        .Select(x => x.Value);

推荐阅读