2013-08-12 3 views
3

У меня есть простое решение для небольшой проблемы, но как разработчик новичка, я всегда хочу узнать более правильные/лучшие способы сделать что-то. На данный момент я получаю строку, которая выглядит более или менее, как это ...Захват ссылочного номера подстроки переменной длины

Некоторые Случайный текст, Ссылка: Supp-1234 и некоторые более случайный текст ...

Теперь, если мы предполагаем, этот сценарий, и мы хотим получить только цифры часть опорного числа, мы можем сделать что-то вроде этого ...

int firstCharacter = mystring.IndexOf("Supp-", StringComparison.InvariantCultureIgnoreCase); 
myIssueId = firstCharacter != -1 ? mailItem.Subject.Substring(firstCharacter + 5, 4) : ""; 

Но теперь предположим, что мы получаем ссылочный номер Supp-12345, теперь это обыкновение Работа. Вы можете попробовать что-то вроде этого ...

int firstCharacter = mystring.IndexOf("Supp-", StringComparison.InvariantCultureIgnoreCase); 
if (firstCharacter != -1) 
{ 
    string temp = mystring.Substring(firstCharacter + 5, 5); 
    try 
    { 
     int x = Convert.ToInt32(temp); // to ensure it is indeed a number 
    } 
    catch (Exception) 
    { 
     temp = mystring.Substring(firstCharacter + 5, 4); // it is 4 digits, not 5 
    } 
    myIssueId = temp; 
} 

Теперь мой вопрос в этом. Как улучшить этот код? Это слишком грязно для меня. Любые идеи будут оценены.

+1

Это похоже на работу для регулярных выражений: http://msdn.microsoft.com/en-us/library/hs600312.aspx. Здесь вы должны использовать что-то вроде 'Supp- (? \ d +)', тогда подстрока, представляющая только цифры, будет в группе захвата 'issue'. – millimoose

+1

Насколько я ненавижу это говорить, это тип проблемы. Регулярные выражения были созданы для решения. –

+0

thats smart ... регулярные выражения ... Я помню, используя их в университете ... – KapteinMarshall

ответ

3

Вы ищете некоторые цифры, которые предшествуют строке «Supp-». Это может быть переведено в регулярное выражение, как

(<=Supp-)\d+ 

Вы бы использовать его как myIssueId = Regex.Match(input, "(<=Supp-)\d+").Value.

+0

Возможно, я предпочел бы 'Supp - (\ d +)' и извлечь первую группу выше, используя look-around. – Dukeling

+0

Я как раз собирался написать свой собственный, я немного ржавый с ними. Но спасибо вам, сэр! – KapteinMarshall