2014-01-27 3 views
1

Я изо всех сил пытаюсь найти группу текста в одиночной кавычке, используя регулярное выражение. Мне нужны ваши советы о том, как это получить.Регулярное выражение найти групповое совпадение в кавычках

Введите текст:

Transfer assignee from 'David, Patricia' to '' 
Transfer group from 'Science Department - Support Group' to 'Science Department - Human Resources ' 

Требование: Мне нужно извлечь группу из и группы в единой цитаты и сохранить его в базе данных.

Я пробовал, но у меня всегда был пустой результат. Вот код

public void ExtractGroup(string text) 
    { 
     var match = Regex.Match(text, @" group from '([^']*)" to '([^']*)", RegexOptions.IgnoreCase); 

     if(match.Success) { 
      var groupfrom = match.Groups[1].Value; 
      var groupTo = match.Groups[2].Value; 
     } 
    } 
+1

Вы написали двойную кавычку вместо одной кавычки до 'to' в своем шаблоне. –

ответ

2

Я попробовал ваш код, и я обнаружил, что он работает нормально:

public static void ExtractGroup() 
{ 
    string input = "Transfer assignee from 'David, Patricia' to '' Transfer group from 'Science Department - Support Group' to 'Science Department - Human Resources '"; 
    var match = Regex.Match(input, @" group from '(?<from>[^']*)' to '(?<to>[^']*)'", RegexOptions.IgnoreCase); 

    if (match.Success) 
    { 
     Console.WriteLine(match.Groups["from"]); // Science Department - Support Group 
     Console.WriteLine(match.Groups["to"]); // Science Department - Human Resources 
    }    
} 

Однако я запустить его в приложении C# консоли. Но я не думаю, что это будет иметь значение.

0

Учитывая этот вход:

Transfer assignee from 'David, Patricia' to '' Transfer group from 'Science Department - Support Group' to 'Science Department - Human Resources ' 

И учитывая ваше описание:

to extract the group from and group to in the single quote 

Вы ожидаете, что выход будет эти две строки:

Science Department - Support Group 
Science Department - Human Resources 

Я бы ожидал egex, как это будет работать:

to .*?'(.*?)' to '(.*?)' 

Но, я бы, наверное, сделать это немного более полным, как вы можете весь набор данных позже:

Transfer (.*?) from '(.*?)' to '(.*?)' Transfer (.*?) from '(.*?)' to '(.*?)' 

Таким образом, вы получите:

1: transfer type 1 - 'assignee' 
2: transfer from 1 - 'David, Patricia' 
3: transfer to 1 - '' 
4: transfer type 2 - 'group' 
5: transfer from 2 - 'Science Department - Support Group' 
6: transfer to 2 - 'Science Department - Human Resources ' 

В качестве альтернативы вы можете абстрагировать это немного с помощью регулярного выражения Transfer (.*?) from '(.*?)' to '(.*?)' и применить его к строке несколько раз, пока тип передачи не будет равен group. Таким образом, вы можете позже добавить логику для других типов передачи, и вы можете объявить любое количество переводов в ней без каких-либо взломов.

Смежные вопросы