首页 > 解决方案 > 将正则表达式捕获的子字符串转换为整数并将其用作 VB.Net 中的函数参数

问题描述

我有一个字符串,例如:

Dim initialString As String = "Some text here is f(42,foo,bar) and maybe some other here."

并希望将“f(42,foo,bar)”部分替换为具有以下原型的函数的评估:

    Function myLittleFunction(ByVal number As Integer, ByVal string0 As String = "NA0", ByVal string1 As String = "NA1")

我用这个正则表达式做的女巫:

finalString = System.Text.RegularExpressions.Regex.Replace(initialString, "f\((\d+),([a-zA-Z0-9_ ]+),([a-zA-Z0-9_ ]+)\)", myLittleFunction(Convert.ToUInt32("${1}"), "$2", "$3"))

但这不起作用,因为 Convert.ToUInt32("${1}") 失败。如果手动将其替换为任何整数并运行代码,我的字符串中就有正确的评估和替换。

如何正确地将 "$1" 转换为适当的整数?

标签: regexvb.nettype-conversion

解决方案


字符串替换模式不能被插值用作方法的变量。

您可以使用匹配评估器

Dim rx = New Regex("f\((\d+),([a-zA-Z0-9_\s]+),([a-zA-Z0-9_\s]+)\)")
Dim result = rx.Replace(s, New MatchEvaluator(Function(m As Match)
         Return myLittleFunction(Convert.ToUInt32(m.Groups(1).Value), m.Groups(2).Value, m.Groups(3).Value)
     End Function))

m是一个Match对象,由方法找到的对象Regex.Replace。您可以使用 .regex 访问使用正则表达式捕获的所有组m.Groups(N).Value


推荐阅读