我正在寻找一个正则表达式,它可以匹配字符串中的整数,小数和分数:
以下是一些例子
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“
上述例子的解释:
到目前为止,我已经提出了与任何数值匹配的代码,即整数和小数,但我仍然坚持分数。
Dim matches = Regex.Matches(curCellVal + "", "[\d.]+")
上面的代码为11 3/8” x 15 7/8“
提供了6个匹配,我需要它给我2个。
我不能胜任正则表达式,所以任何帮助都会非常感激。
我的偏好语言是VB.net。
答案 0 :(得分:3)
给这个人一个机会:
(\d+[\/\d. ]*|\d)
将来,我建议您更清楚地提出问题,以便我们能够真正理解您尝试做的事情 - 提供输入,预期输出,并包含您的编程语言使用
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)