Это явно работа для регулярных выражений.
String toMatch = "Fax : 666-111-2222 Phone # : 200100200";
Regex matchPhone = new Regex("\\bPhone\\s*#\\s*:\\s*");
MatchCollection matches = matchPhone.Matches(toMatch);
foreach (Match match in matches)
{
Int32 position = match.Index + match.Length;
// do whatever you want with the result here
}
В коде обратная косая черта удваивается, но фактическое регулярное выражение там:
\bPhone\s*#\s*:\s*
\b
указывает границу слова, означающую начало или конец слова. Это также предотвращает сопоставление чего-либо вроде «МегаФона». \s
означает любой тип пробела. Это соответствует пробелам, символам табуляции и разрывам строк. *
означает ноль или более повторений, то есть не имеет значения, пропущены ли вообще пробелы или длина составляет сто пробелов, тем не менее,
Обратите внимание, что это даст вам только индекс для начала всех найденных телефонных номеров в данной строке. Вы не указали, существует ли какой-либо конкретный c способ определения конца телефонного номера, или даже если был какой-либо конкретный c ожидаемый формат для них, поэтому он не включен. Если вы хотите этого и не знаете точно, что может следовать за этим номером телефона, посмотрите на группы символов регулярного выражения и соответствующие спецификации c цифра c и используйте группу захвата, чтобы извлечь ее из сопоставленного содержимого.
Если во всей строке ожидается только одно совпадение, это можно сделать с помощью
String toMatch = "Fax : 666-111-2222 Phone # : 200100200";
Regex matchPhone = new Regex("\\bPhone\\s*#\\s*:\\s*");
Match match = matchPhone.Match(toMatch);
Int32 position = match.Index + match.Length;