Regex 需要在vb.net中解析字符串

Regex 需要在vb.net中解析字符串,regex,vb.net,Regex,Vb.net,我的项目的一部分是从外部源(GoogleDocs)检索字符串变量并对其进行解析。此字符串表示宽度和高度。 我检索没有问题,我只需要将它解析为两个字符串。 该字符串有4种变体。 以下是一些例子: 3"x4" 3"hx4"w 3hx4w 3x4 宽度始终是第一个数字,高度始终是第二个数字。有时,宽度和高度有小数点 我是雷格斯努贝。若有人能帮我把它解析成两个字符串的数值,我将不胜感激 Dim matches = Regex.Matches("3.45x4.3""", "[\d.]+") Conso

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

3"x4"
3"hx4"w
3hx4w
3x4
宽度始终是第一个数字,高度始终是第二个数字。有时,宽度和高度有小数点

我是雷格斯努贝。若有人能帮我把它解析成两个字符串的数值,我将不胜感激

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

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

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

下面这样的事情是快速完成它的方法

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)

你也应该考虑使用正则表达式来做这件事,


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

编辑:这比我想象的还要简单。你不必使用我在这里提到的大部分东西,因为你不必在同一条线上费力地通过多个测量。不过,请查看本文的其余部分,并开始学习一些正则表达式:)

您必须使用分组/捕获来获取匹配的数据。将您试图匹配的内容包装到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)
一些文档:

我还建议谷歌搜索正则表达式教程。以下是一个特定于.Net的:


对于vb用户,下面是vb中的代码:Dim matches=Regex.matches(“3.45x4.3”“,“[\d.]+”)Console.WriteLine(“宽度:”+匹配(0.Value)Console.WriteLine(“高度:”+匹配(1.Value))