Привести подстроку, отловленную регулярным выражением, к целому числу и использовать ее в качестве аргумента функции в VB.Net - PullRequest
0 голосов
/ 10 октября 2018

У меня есть строка, такая как:

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» к соответствующему целому числу?

1 Ответ

0 голосов
/ 10 октября 2018

Шаблон замены строки нельзя интерполировать для использования в качестве переменных для метода.

Вы можете использовать оценщик совпадений :

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.Вы можете получить доступ ко всем группам, захваченным регулярным выражением, используя m.Groups(N).Value.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...