使用VB.net Regex提取字符串的两个部分

时间:2014-07-18 21:52:51

标签: regex vb.net

我的字符串符合"x Packs of y"格式,例如"15 packs of 5""1 pack of 10"等等。

我想使用正则表达式查找"x Packs of y"并将x放在一个变量中,y放在第二个变量中。

有人可以建议我这样做吗?

3 个答案:

答案 0 :(得分:4)

试试这个......

Dim foo = "15 packs of 5"

Dim match = Regex.Match(foo, "(\d+) packs? of (\d+)", RegexOptions.IgnoreCase)

Dim x = match.Groups(1).Value
Dim y = match.Groups(2).Value

Console.WriteLine("x = " & x)
Console.WriteLine("y = " & y)

Live Demo - Fiddle

更新:感谢Braj指出包/包。

答案 1 :(得分:3)

从索引1和2获取匹配的组

(\d+) packs? of (\d+)

DEMO

程序中使用的字符串文字:C#(还添加了忽略大小写)

@"(?i)(\d+) packs? of (\d+)"

详细了解Ignore caseRegex.Match

答案 2 :(得分:2)

在.NET中,对于ASCII数字,请使用[0-9],而不是\d

在.NET中,\d匹配任何脚本中的数字,包括Thai和Klingon。假设您只想要ASCII数字0到9而不是654۳۲١८৮੪૯୫୬१७੩௮,请使用:

Dim firstNumber As String
Dim secondNumber As String
Dim RegexObj As New Regex("([0-9]+) packs? of ([0-9]+)", RegexOptions.IgnoreCase)
firstNumber = RegexObj.Match(yourString).Groups(1).Value
secondNumber = RegexObj.Match(yourString).Groups(2).Value

<强>解释

  • RegexOptions.IgnoreCase使其不区分大小写
  • ([0-9]+)将一个或多个数字捕获到第1组
  • packs?pack与可选s
  • 匹配
  • ([0-9]+)会将一个或多个数字捕获到第2组
  • 代码检索组1和2