Как я могу "вырезать" часть строки с помощью регулярного выражения? - PullRequest
6 голосов
/ 13 ноября 2008

Мне нужно вырезать и сохранить / использовать часть строки в C #. Я считаю, что лучший способ сделать это с помощью Regex. Моя строка выглядит так:

"changed from 1 to 10".

Мне нужен способ вырезать два числа и использовать их в другом месте. Какой хороший способ сделать это?

Ответы [ 5 ]

11 голосов
/ 13 ноября 2008

Ошибка проверки оставлена ​​как упражнение ...

        Regex regex = new Regex( @"\d+" );
        MatchCollection matches = regex.Matches( "changed from 1 to 10" );
        int num1 = int.Parse( matches[0].Value );
        int num2 = int.Parse( matches[1].Value );
4 голосов
/ 13 ноября 2008

Точно соответствует только строка «изменена с x на y»:

string pattern = @"^changed from ([0-9]+) to ([0-9]+)$";
Regex r = new Regex(pattern);
Match m = r.match(text);
if (m.Success) {
   Group g = m.Groups[0];
   CaptureCollection cc = g.Captures;

   int from = Convert.ToInt32(cc[0]);
   int to = Convert.ToInt32(cc[1]);

   // Do stuff
} else {
   // Error, regex did not match
}
2 голосов
/ 13 ноября 2008

В вашем регулярном выражении поместите поля, которые вы хотите записать, в скобках, а затем используйте свойство Match.Captures для извлечения соответствующих полей.

Здесь есть пример C # здесь .

1 голос
/ 13 ноября 2008

Использовать именованные группы захвата.

Regex r = new Regex("*(?<FirstNumber>[0-9]{1,2})*(?<SecondNumber>[0-9]{1,2})*");
 string input = "changed from 1 to 10";
 string firstNumber = "";
 string secondNumber = "";

 MatchCollection joinMatches = regex.Matches(input);

 foreach (Match m in joinMatches)
 {
  firstNumber= m.Groups["FirstNumber"].Value;
  secondNumber= m.Groups["SecondNumber"].Value;
 }

Получите Expresson , чтобы помочь вам, у него есть опция экспорта в C #.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Regex, вероятно, не прав (моя копия экспресса истек: D)

0 голосов
/ 13 ноября 2008

Вот фрагмент кода, который делает почти то, что я хотел:

using System.Text.RegularExpressions;

string text = "changed from 1 to 10";
string pattern = @"\b(?<digit>\d+)\b";
Regex r = new Regex(pattern);
MatchCollection mc = r.Matches(text);
foreach (Match m in mc) {
    CaptureCollection cc = m.Groups["digit"].Captures;
    foreach (Capture c in cc){
        Console.WriteLine((Convert.ToInt32(c.Value)));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...