RegEx或Interpreter解释整数/双范围输入

时间:2011-07-12 08:20:35

标签: c# regex parsing interpreter

我需要验证字符串是否采用以下格式 {x:y}或{x,y,...,z}其中x,y,z是整数或双精度数。 我以为我需要一个reg-ex和/或一个翻译。 有谁知道如何去做? 对于这样做的图书馆的建议也将深表赞赏。

第二步是让一个解释器解释像这样的表达式: 0.5 * {0.4,0.6,0.7} - > {} 0.2,0.3,0.35。我意识到最佳方法是为解释器可以使用的语法定义一个语法。

谢谢, 乙

3 个答案:

答案 0 :(得分:2)

鉴于存在101种不同的双重格式,并且.net框架内置了Double.TryParse()。

我会使用正则表达式或只是string.split来获取包含“x,y,z”值的字符串数组,然后在每个值上调用Double.TryParse。

由于您有两种可能的格式,我首先检查输入字符串是否包含“:”,然后使用单独的代码来分割每种格式,以使代码更易于理解。

答案 1 :(得分:0)

我自己并不擅长Regex,但我确实使用它作为获取它们的来源:http://www.regexlib.com/它还包括该网站上的备忘单和正则表达式测试程序,因此您可以自己创建它们非常简单。

希望这有帮助!

答案 2 :(得分:0)

第一个选项

\{[0-9]+(\.[0-9]+)?:[0-9]+(\.[0-9]+)?\}

第二

\{[0-9]+(\.[0-9]+)?(,[0-9]+(\.[0-9]+)?)+\}

用法

var text = "{1.4,65,2.56}";
Regex regex = new Regex("\{[0-9]+(\.[0-9]+)?(,[0-9]+(\.[0-9]+)?)+\}");
if(regex.IsMatch(text))
{
    //string matches your criteria
}

如果要同时检查两种类型,请将正则表达式更改为:

\{([0-9]+(\.[0-9]+)?:[0-9]+(\.[0-9]+)?)|([0-9]+(\.[0-9]+)?(,[0-9]+(\.[0-9]+)?)+)\}