2015-09-05 2 views
0

У меня есть следующая строка:Как извлечь слова из структурированной строки?

"select model (field1, field2, field3, ...)" 

И я хотел бы написать что-то, что выделяет слова, где модель и поля являются.

Так, например:

select Car (door, wheel, antenna) 

Метод 1 возвращает Car. Метод Список 2 возвращается/Массив {door, wheel, antenna}

Итак, другими словами, я ищу extractModel() и extractFields().

Мне кажется, что здесь нужен RegEx, но я не знаю, как решить эту проблему.

+0

ли вы имеете в виду, что «выберите модель (field1, field2, ...)» Ваш источник строк, и вы пытаетесь захватить значения в строке? –

+0

Да! Извините за то, что вы не поняли. – Saphire

+0

Является ли входная строка _always_ в формате _exact_ '' select $ object ($ field [, $ field [, ...]]) '?? Если да, попытались ли вы создать регулярное выражение, которое фиксирует это? – CodeCaster

ответ

3

Это должно работать:

var m = "select Car (door, wheel, antenna)"; 
Regex r = new Regex(@"select\s+(.*)\s+\((.*)\)"); 
var model = r.Match(m).Groups[1].Value; 
// untrimmmed: 
// var fields = r.Match(m).Groups[2].Value.Split(','); 
// trimmed: 
var fields = r.Match(m).Groups[2].Value.Split(',').Select(s => s.Trim()).ToArray(); 
+0

Я бы добавил '.Select (Trim) .ToArray()' для обрезки ввода. – CodeCaster

+0

Да, только что добавил. – rbm

+0

Несколько точек на этом '.Select (_ => _.Trim());': ['_' - синтаксис игнорируемого параметра] (http://stackoverflow.com/questions/424775/is-there -a-better-way-to-express-a-parameterless-lambda-than) ('s' было бы достаточно), вы можете сократить его до' Select (Trim) 'и вы хотите, чтобы этот результат был материализован (' .ToList() 'или' .ToArray() '), так как вы, вероятно, инете его где-то в любом месте, и это сделает несколько перечислений или других операций безопасными и возможными. Поэтому, пожалуйста, сделайте это '.Select (Trim) .ToList()' (или 'ToArray()'), и у вас есть мой upvote. ;-) – CodeCaster

0

Другое направление пойти:

select (\S*) \(([^)]*) 

Второй матч группы, разделенных запятыми список, и вы разделите на него.

http://rubular.com/r/ByLODRGVdy

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