首页 > 解决方案 > 从字符串中提取数字的更好方法

问题描述

我一直在尝试将这样的字符串更改为这样{X=5, Y=9}的字符串(5, 9),因为它将用作屏幕上的坐标。

我终于想出了这个代码:

Dim str As String = String.Empty
Dim regex As Regex = New Regex("\d+")
Dim m As Match = regex.Match("{X=9")
If m.Success Then str = m.Value
Dim s As Match = regex.Match("Y=5}")
If s.Success Then str = "(" & str & ", " & s.Value & ")"
MsgBox(str)

这确实有效,但肯定有更好的方法来做到这一点(我不熟悉正则表达式)。

我的程序中有很多要转换的东西,像上面那样做会很痛苦。

标签: regexvb.netwinforms

解决方案


您可以使用

Dim result As String = Regex.Replace(input, ".*?=(\d+).*?=(\d+).*", "($1, $2)")

正则表达式的意思

  • .*?- 尽可能少的除换行符以外的任何 0+ 字符
  • =- 一个等号
  • (\d+)- 第一组:一位或多位数字
  • .*?=- 除换行符之外的任何 0+ 字符尽可能少,然后是一个=字符
  • (\d+)- 第 2 组:一位或多位数字
  • .*- 尽可能多的除换行符以外的任何 0+ 字符

替换模式中的$1and$2是替换反向引用,它们指向存储在第 1 组和第 2 组内存缓冲区中的值。


推荐阅读