Создание шаблона C # для получения целого числа из строки

#c# #pattern-matching

#c# #сопоставление с шаблоном

Вопрос:

у меня есть несколько строк, подобных приведенным ниже:

 hu212 text = 1
reference = 1
racial construction = 1
2007 = 1
20th century history = 2
  

и я хочу взять только целое число ПОСЛЕ ‘=’.. как я могу это сделать?
я пытаюсь это:

  Regex exp = new Regex(@"[a-zA-Z]*[0-9]*[=][0-9] ",RegexOptions.IgnoreCase);
            try
            {
                MatchCollection MatchList = exp.Matches(line);
                Match FirstMatch = MatchList[0];
                Console.WriteLine(FirstMatch.Value);
            }catch(ArgumentOutOfRangeException ex)
            {
                System.Console.WriteLine("ERROR");
            }
  

но это не работает…
я пробовал некоторые другие, но получаю результаты типа «20th» или «hu212″…
Что делает exaclty Matches? дает мне остальную часть строки, которая не соответствует reg?

Комментарии:

1. Вы можете использовать IndexOf и Substring методы String .

2. почему вы не можете использовать функцию string.split? просто мысль..

Ответ №1:

Вместо регулярного выражения вы также могли бы сделать:

 int match = int.Parse(line.SubString(line.IndexOf('=')).Trim());
  

Ответ №2:

Необходимо разрешить пробел ( s ) между = и цифрами:

 Regex pattern = new Regex(@"=s*([0-9] )$");
  

Вот более полный пример:

 Regex pattern = new Regex(@"=s*([0-9] )$");
Match match = pattern.Match(input);
if (match.Success) 
{
    int value = int.Parse(match.Groups[1].Value);
    // Use the value
}
  

Посмотрите, как это работает онлайн: ideone

Комментарии:

1. 1 за то, что не ругал парня за использование очень простого регулярного выражения. И для ответа на его вопрос

2. что-то в этом роде .. но я не хочу ‘=’

3. в OP не указано, что это должно быть регулярное выражение.

4. @Michael: Не этот пост, я был впечатлен мягкостью этого набора ответов. Я заметил растущую тенденцию разной степени грубости, когда люди пытаются использовать регулярные выражения для чего-либо в S.O. Я избегал сообщений с регулярным выражением в заголовке b / c, это меня раздражает.

5. SpDaglas — пока вы используете «Групповую» часть соответствия (как у него было в коде выше), вы не получите ничего, что не было записано в groups, чего не было у his equal и space. Посмотрите его онлайн-пример — я думаю, вы обнаружите, что это именно то, что вы хотели.

Ответ №3:

как насчет

 string str = "hu212 text = 1"
string strSplit = str.split("=")[1].trim();
  

Ответ №4:

 String StringToParse = "hu212 text = 1";
String[] splitString = String.Split(StringToParse);

Int32 outNum;
Int32.TryParse ( splitString[splitString.Length-1], out outNum );
  

Ответ №5:

  Regex pattern = new Regex(@"=s?(d)");
  

Это позволяет использовать с пробелом или без него. Число находится в группе 1.

 hu212 text =1
reference = 1