需要解析vb.net中的字符串

时间:2011-12-07 20:26:45

标签: regex vb.net

我的项目的一部分是从外部源(谷歌文档)检索字符串变量并解析它。此字符串表示宽度和高度。 我没有检索问题,我只需要将其解析为两个字符串。 该字符串有4种变体。 以下是示例:

3"x4"
3"hx4"w
3hx4w
3x4

宽度始终是第一个数字,高度始终是第二个。有时,宽度和高度都有小数点。

我是一个正则表达式的立方体。如果有人可以帮助我将其解析为两个数字值字符串,我将非常感激。

3 个答案:

答案 0 :(得分:3)

Dim matches = Regex.Matches("3.45x4.3""", "[\d.]+")

Console.WriteLine("width: " + matches(0).Value)
Console.WriteLine("height: " + matches(1).Value)

正则表达式的英文表示基本上是[\d.]是一个数字或点的字符。 +表示一个或多个。

答案 1 :(得分:2)

我建议你学会钓鱼,因为它会带来红利,这是一个非常简单的字符串,可用正则表达式解析。

编辑:它比我想象的更简单。你不必使用我在这里提到的大部分内容,因为你不必在同一行上浏览多个这些测量。 Check out Yuriy's answer。不过,请查看其余内容并开始学习一些正则表达式:)

您必须使用分组/捕获来获取您匹配的数据。包裹你想要与parens匹配的东西来做到这一点:

(someTextToMatch)

不要将您不需要捕获的内容分组,也不要使用非捕获组:

(?:someTextToMatch)

(在这个例子中你可能不需要这些,但你最终可能需要它们,因为你只获得9次捕获)

立即使用有用的语言元素:

\s     match any single whitespace character
\d     match any single digit
.      match any single character
[Xx]   match a single upper-case or lower-case x
?      match one or zero of the previous match
+      match one or more of the previous match
*      match zero or more of the previous match (probably won't need this here)

一些文档:

我还建议使用Google搜索正则表达式教程。这是.Net特定的一个:

答案 2 :(得分:1)

像下面这样的事情就是快速做到这一点

Dim s as string = GetStrinFromDocs()

' remove quotes
s.replace("""","")

'remove other chars
s.replace("w","")
s.replace("h","")

dim Width as integer = ctype(s.split("x")(0),integer)
dim Height as integer = ctype(s.split("x")(1),integer)

您应该考虑使用正则表达式来执行此操作,

http://www.regular-expressions.info/dotnet.html