【问题标题】:A RegEx for Expressions starting with $以 $ 开头的表达式的正则表达式
【发布时间】:2015-05-25 00:44:59
【问题描述】:

我有一个表达式 ($ASMLNA$ * $TSM$ * 8 * ($GrossDownTarget$ * $005930K$)+15)

现在我正在尝试获取 $$ 之间的所有变量。示例 $ASMLNA$ 所以对我来说应该是 ASMLNA。

我已经尝试过使用 RegEx,这就是我迄今为止能够做到的

正则表达式 r = new Regex(@"[^\$]"); 字符串内容 = txtRegEx.Text.Trim(); MatchCollection ImageCollection = r.Matches(Contents); 字符串 tempContents = string.Empty; foreach(ImageCollection 中的匹配项) { tempContents+= 匹配值; }

如果有人能指出正确的方向,那就太好了。

【问题讨论】:

  • 是什么让你觉得这里需要使用正则表达式?为什么不一次遍历字符串一个字符并将开始和结束位置保存到一个LinkedList<int>(或者您可以有两个:一个用于开始,一个用于结束),然后通过无正则表达式代码执行任何其他魔术也一样?

标签: c# asp.net regex


【解决方案1】:

试试这个正则表达式:

(?<=\$)\b[^$]+\b(?=\$)

如果您的变量只能包含单词字符 ([a-zA-Z0-9_]),则此正则表达式会更好:

(?<=\$)\w+(?=\$)

【讨论】:

  • 这也将返回-例如-第二个和第三个$之间的字符串,不是吗?
  • @exhuma:我相信你是对的,我用\b 更新了它,考虑到上面的示例数据,这似乎是有效的。谢谢。
【解决方案2】:

您的表达式仅匹配字符串开头的 $。要获得组,我想你想要这样的东西:@"(\$.+?\$)"

编辑:糟糕。我错过了关于剥离美元的一点。试试这个版本:\$(.+?)\$

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 2020-05-07
    • 2023-03-27
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多