将输入字符串转换为英寸

时间:2018-04-05 17:39:46

标签: c#

我想做的是采用输入字符串,采用体系结构格式并将其转换为双英寸。 例如:

Input: (String)    Output: (Double)

1'-2"              14    
1'-2 1/2"          14.5    
1'2 3/16"          14.1875    
1'                 12    
12                 12    
12"                12    
1'0.5              12.5    
1'0.5"             12.5    
1'-0.5             12.5    
1'-0.5"            12.5

我知道我需要遍历字符串中的每个字符并测试一堆案例,但我不知道c#中是否有一些内置函数或者其他资源可以为我做这个而不是make我重新发明了轮子。

1 个答案:

答案 0 :(得分:0)

胜利的正则表达式!

好的,如果你是Regex的新手,它基本上是一种解析字符串的方法。所以,实际上,你的输入是由什么组成的?

在高层次上,你有以下三种可能性之一:

  1. 复合:数字,后跟',后跟一个 - 或空格, 后跟一个数字,并可选择以“
  2. 结尾
  3. 仅限英尺:数字,后跟'
  4. 仅限英寸:数字,可选地后跟“
  5. 那些'号码?

    的可能性:

    • 1+位(又名“23”)
    • 1+位,'。'和1+位(又名“32.43”)
    • 1+位,1位数,1位数,斜线和1位数(又名“32” 13/16" )
    • 1位数,斜线和1位数(又名“13/16”)

    好的,首先,我们需要一个正则表达式用于你的一个“数字”:

    \d+|\d+.\d+|\d+ \d+\/\d+|\d+\/\d+
    

    (看起来很复杂,但请参阅以下两页以供参考:http://www.rexegg.com/regex-quickstart.htmlhttps://regex101.com/

    现在,正好我们的正则表达式不会让复杂,你可以这样做:

    string regexSnippetForNumber = @"\d+|\d+.\d+|\d+ \d+\/\d+|\d+\/\d+";
    string regexForComposite = 
        "^(" + regexSnippetForNumber + ")'[ -]" + 
        "(" + regexSnippetForNumber + ")\"?$"
    

    ...然后,如果输入与regexForComposite匹配,则使用两个捕获组来获取这两个数字。 (您必须解析才能获得数值。)

    希望这是有道理的,可以让你足够接近终点线。如果您之前从未使用过Regex,我强烈建议您阅读它们。当你需要进行字符串解析时,它们非常方便,否则会非常烦人(就像这个确切的问题!)