VB.Net регулярное выражение добавить в строку - PullRequest
0 голосов
/ 04 декабря 2018

Я борюсь с выражением регулярного выражения в VB.Net.Поскольку я новичок в regex, я не знаю, как решить эту проблему.

Моя цель - построить калькулятор, и я хочу иметь возможность вычислять sin, cos и tan.Моя входная строка для одного из этих вычислений, например, может быть sin(93) + tan(2) + cos(364) + 5 * 3.

Я использовал MathParser для вычисления, и это прекрасно работает, однако по умолчанию MathParser использует радианы,и я хочу, чтобы опция переключилась на десятичную.В моей форме есть элемент управления, который устанавливает логическое значение isRad в значение false, когда пользователь выбирает десятичную, и наоборот.Чтобы использовать десятичные дроби в MathParser, входная строка должна иметь вид sin(93*[dec]) + tan(2*[dec]) + cos(364*[dec]) + 5 * 3.

Я попытался использовать регулярное выражение, чтобы найти, где во входном коде у меня есть функции sine, cos или tan.Я придумал (sin|cos|tan)\(.?.?.?.?.?.?\), но я знаю, что это не совсем блестящее выражение.Однако, даже если это было идеально, мой вопрос касается того, как поместить в строку требуемый *[rad] или *[dec].Я пробовал следующее, но я просто получаю (sin|cos|tan)\(.?.?.?.?.?.?\*[dec]) в качестве вывода.

    Dim equationString As String = Regex.Replace("sin(93) + tan(2) + cos(364) + 5 * 3", "(sin|cos|tan)\(.?.?.?.?.?.?\)", "(sin|cos|tan) \ (.?.?.?.?.?.?*[" & Str_RadOrDec & "]\)")
    MsgBox(equationString)

1 Ответ

0 голосов
/ 04 декабря 2018

Вы можете использовать группы захвата, как это.

Dim equationString As String = Regex.Replace("sin(93) + tan(2) + cos(364) + 5 * 3", "(sin|cos|tan)(\(.?.?.?.?.?.?)(\))", "$1$2" + "*[" & Str_RadOrDec & "]$3")

https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.match.groups?view=netframework-4.7.2

Шаблон регулярного выражения может включать в себя подвыражения, которые определяются путем включения частишаблон регулярного выражения в скобках.Каждое такое подвыражение образует группу.Свойство Groups предоставляет доступ к информации о совпадениях подвыражений.

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