正则表达式匹配整数,小数和分数

时间:2014-01-29 21:47:53

标签: .net regex

我正在寻找一个正则表达式,它可以匹配字符串中的整数,小数和分数:

以下是一些例子

11.325 x 55.65
11x13
11”x13”
11” x 13”
11 3/8 x 15 7/8 
11 3/8” x 15 7/8“

上述例子的解释:

  1. 两位小数
  2. 两个整数
  3. 两个带引号的整数表示英寸
  4. 与上述相同,但有空格
  5. 两个整数,每个整数后跟一个分数
  6. 与上述相同,以英寸分数后的报价
  7. 到目前为止,我已经提出了与任何数值匹配的代码,即整数和小数,但我仍然坚持分数。

    Dim matches = Regex.Matches(curCellVal + "", "[\d.]+")
    

    上面的代码为11 3/8” x 15 7/8“提供了6个匹配,我需要它给我2个。

    我不能胜任正则表达式,所以任何帮助都会非常感激。

    我的偏好语言是VB.net。

2 个答案:

答案 0 :(得分:3)

给这个人一个机会:

(\d+[\/\d. ]*|\d)

http://regex101.com/r/oO9yI9

将来,我建议您更清楚地提出问题,以便我们能够真正理解您尝试做的事情 - 提供输入,预期输出,并包含您的编程语言使用

vb.net符合PCRE,因此您应该能够使用:

Dim regex As Regex = New Regex("(\d+[\/\d. ]*|\d)")
Dim match As Match = regex.Match("11.325 x 55.65")
If match.Success Then
    Console.WriteLine(match.Value)
    # this matches, so you'll get a value
End If

答案 1 :(得分:2)

这个正则表达式应该有效:

@"\d+(\.\d+|\s+\d+/\d+)?"

这匹配一个或多个数字的任何序列,可选地后跟一个.后跟一个或多个数字一个或多个空格字符的序列,后跟一个或更多数字,后跟/,后跟一个或多个数字。

例如:

Dim inputs = New String() { _
    "11.325 x 55.65", _
    "11x13", _
    "11””x13””", _
    "11”” x 13””", _
    "11 3/8 x 15 7/8 ", _
    "11 3/8”” x 15 7/8““" }
For Each input in inputs
    Console.Write(input + ": ")
    For Each match as Match in Regex.Matches(input, "\d+(\.\d+|\s+\d+/\d+)?")
        Console.Write(" (" + match.Value + ") ")
    Next
    Console.WriteLine()
Next

产生输出:

11.325 x 55.65:  (11.325)  (55.65) 
11x13:  (11)  (13) 
11"x13":  (11)  (13) 
11" x 13":  (11)  (13) 
11 3/8 x 15 7/8 :  (11 3/8)  (15 7/8) 
11 3/8" x 15 7/8":  (11 3/8)  (15 7/8)