Получить только слово перед специальным символом
У меня есть файл с "кусками" предложений из медицинского сектора.
Предложения выглядят так:
"[Снова 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]+)// должно работать