Мне нужно извлечь подстроки из некоторых строк, например:
Мои данные - вектор: c("Shigella dysenteriae","PREDICTED: Ceratitis")
a = "Shigella dysenteriae"
b = "PREDICTED: Ceratitis"
Я надеюсь, что если строка начинается с "PREDICTED:", она может быть извлечена в последующее слово (возможно, "Ceratitis"), а если строка не начинается с "PREDICTED", она может быть извлечена в первое слово (может быть, шигелла);
В этом примере результат будет:
result_of_a = "Shigella"
result_of_b = "Ceratitis"
Ну, это типичное условное регулярное выражение. Я пытался, но всегда терпел неудачу;
Я использовал R
, который может совместить регулярное выражение perl
.
Я знаю, что R поддерживает регулярное выражение perl
, поэтому я попытался использовать regexpr
и regmatches
, две функции для извлечения нужных подстрок.
Код:
pattern = "(?<=PREDICTED:)?(?(1)(\\s+\\w+\\b)|(\\w+\\b))"
a = c("Shigella dysenteriae")
m_a = regexpr(pattern,a,perl = TRUE)
result_a = regmatches(a,m_a)
b = c("PREDICTED: Ceratitis")
m_b = regexpr(pattern,a,perl = TRUE)
result_b = regmatches(b,m_b)
Наконец, результат:
# result_a = "Shigella"
# result_b = "PREDICTED"
Это не тот результат, которого я ожидаю, result_a верен, result_b неверен.
ПОЧЕМУ? Кажется, что условие не работает ...
PS:
Я пытался прочитать некоторые детали условного выражения. это сеть, которую я пытался прочитать: https://www.regular -expressions.info / conditional.html , и я пытаюсь имитировать «шаблон» из этой сети, а также пытался использовать программное обеспечение «RegexBuddy», чтобы найти причина.