Получить только слово перед специальным символом

У меня есть файл с "кусками" предложений из медицинского сектора.

Предложения выглядят так:

"[Снова ADVP /RB ] [VP видно /VBN ] [NP is/VBZ ] [NP a/DT focal/JJ асимметрия / NN].

"[NP диагностика / JJ маммография /NN ] [PP of/IN ] [NP the/DT левая / JJ грудь / NN].

Мне нужен способ извлечь только слова из этих "кусков". Общим правилом для всех предложений является то, что слова идут перед символом '/'.

Есть ли возможность объединить REGEX или что-то еще, чтобы получить строку без POS?

Спасибо

4 ответа

Решение

Это похоже на работу:

var patt = @"\s(\b(.+?))/";
var matches = Regex.Matches("[ADVP again/RB ] [VP seen/VBN ] [NP is/VBZ ] [NP a/DT focal/JJ asymmetry/NN ].", patt);

var matchedValues = matches
    .Cast<Match>()
    .Select(match => match.Groups[1].Value);

var output = string.Join(" ", matchedValues);

=> "снова виден очаговая асимметрия"

Найти все совпадения этого регулярного выражения.

\w+(?=/)

Я проверил это на http://regexpal.com/. Работал как шарм.

Регулярное выражение очень просто. Соответствует словам (\w+) с последующим / не делая / часть матча. Это устраняет необходимость иметь дело с группами захвата и тому подобное. Это соответствует "с последующим" (?=/)который по существу соответствует точке, за которой сразу следует /, Это известно как предвидение.

Вот пример кода:

string sentence = "[ADVP again/RB ] [VP seen/VBN ] [NP is/VBZ ] [NP a/DT focal/JJ asymmetry/NN ].";
MatchCollection matches = Regex.Matches(sentence, @"\w+(?=/)");
foreach (Match match in matches)
{
    Console.WriteLine(match.Value);
}

Выход:

again
seen
is
a
focal
asymmetry

Попробуй это.

var val = "[ADVP again/RB ] [VP seen/VBN ] [NP is/VBZ ] [NP a/DT focal/JJ asymmetry/NN ]";    
var list = val.Split('/').Select(c => c.Split(' ').Last());

Вы ищете соответствие RegEx снова, видели, есть, симметрия и диагностика, маммограмма, слева, грудь

Правильно?

Тогда... /\b([\w]+)// должно работать

Другие вопросы по тегам