#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