Member 14145167 Ответов: 2

Почему группы в регулярном выражении не работают правильно


Match match = Regex.Match(textBox1.Text, @"(\d)*(\d)");
         MessageBox.Show(match.Groups[1].Value.ToString());
             double x2 = Convert.ToDouble(match.Groups[1].Value.ToString());
             double x1 = Convert.ToInt32(match.Groups[2].Value.ToString());

             textBox1.Text = Regex.Replace(textBox1.Text, @"\d*\d", (x1 * x2).ToString());


Что я уже пробовал:

Я пытался написать математический парсер и поймал проблему с группами регулярных выражений например

текстовый.Текст = 2*2

и совпадение.Группы[1].Значение пустое.

Dave Kreskowiak

Будет ли это работать или нет, зависит от сложности выражений, которые вы планируете поддерживать. Если это не более чем "некоторое значение * некоторое значение", то вам может сойти с рук набор регулярных выражений, чтобы захватить числа и сделать математику.

Если вы планируете что-то более сложное, регулярные выражения не пойдут на это за вас.

2 Ответов

Рейтинг:
2

Mohibur Rashid

Для вашего лучшего понимания

using System;
using System.Text.RegularExpressions;

namespace myApp
{
	class Program
	{
		static void Main(string[] args)
		{
			String chk = "5*6";
			Match match = Regex.Match(chk, @"(\d)\*(\d)");
			Console.WriteLine(match.Groups[0]);
			Console.WriteLine(match.Groups[1]);
			Console.WriteLine(match.Groups[2]);
		}
	}
}


Результат:
myApp$ dotnet run
5*6
5
6


Рейтинг:
0

Patrice T

Цитата:
Почему группы в регулярном выражении не работают правильно

Потому что * имеет особое значение в регулярном выражении, когда вы хотите использовать его как литерал. Вам нужно бежать * к \* .

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Онлайн-тестер регулярных выражений и отладчик: PHP, PCRE, Python, Golang и JavaScript[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение: Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]
Этот сайт также показывает регулярное выражение в красивом графике, но не может проверить, что соответствует регулярному выражению: Regexper[^]