regex - 从字符串中提取数字的更好方法
问题描述
我一直在尝试将这样的字符串更改为这样{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)
这确实有效,但肯定有更好的方法来做到这一点(我不熟悉正则表达式)。
我的程序中有很多要转换的东西,像上面那样做会很痛苦。
解决方案
您可以使用
Dim result As String = Regex.Replace(input, ".*?=(\d+).*?=(\d+).*", "($1, $2)")
正则表达式的意思
.*?
- 尽可能少的除换行符以外的任何 0+ 字符=
- 一个等号(\d+)
- 第一组:一位或多位数字.*?=
- 除换行符之外的任何 0+ 字符尽可能少,然后是一个=
字符(\d+)
- 第 2 组:一位或多位数字.*
- 尽可能多的除换行符以外的任何 0+ 字符
替换模式中的$1
and$2
是替换反向引用,它们指向存储在第 1 组和第 2 组内存缓冲区中的值。