2016-10-14 5 views
1

У меня есть строка в следующем формате:Расщепление строки с помощью Regex

string test = "test.BO.ID"; 

Моя цель состоит строка, часть строки, что приходит после первой точки. Так что я ожидаю, что вывод будет «BO.ID».

Вот что я пробовал:

// Checking for the first occurence and take whatever comes after dot 
var output = Regex.Match(test, @"^(?=.).*?"); 

Выход я получаю пустой.

Какая модификация должна быть сделана для Regex?

ответ

4

Вы получаете пустой вывод, потому что шаблон, который у вас есть, может совпадать с пустой строкой в ​​начале строки, и этого достаточно, так как .*? является ленивым подшаблоном и . соответствует любому символу.

Использование (значение будет в Match.Groups[1].Value)

\.(.*) 

или (с опережающего просмотра, чтобы получить строку как Match.Value)

(?<=\.).* 

См regex demo и C# online demo.

Не-регулярное выражение подход можно использовать String#Split с count аргументом (demo):

var s = "test.BO.ID"; 
var res = s.Split(new[] {"."}, 2, StringSplitOptions.None); 
if (res.GetLength(0) > 1) 
    Console.WriteLine(res[1]); 
+0

FYI, демонстрация C# доступна по адресу http://ideone.com/9vmaoo –

3

Если вы хотите только часть после первой точки вам не нужно регулярное выражение на все:

x.Substring(x.IndexOf('.')) 
Смежные вопросы