Извлечь число со знаком после строки с помощью строки - PullRequest
1 голос
/ 17 марта 2020

У меня есть список строк. Я хочу вернуть число со знаком после строки «Kα1».

mylist <- c("Si/Si Kα1 pos-1 map data.tif", "Si/Si Kα1 pos1 map data.tif", "Si/Si Kα1 pos2 map data.tif", "Si/Si Kα1 pos3 map data.tif","Si/Si Kα1 pos4 map data.tif")

Я пробовал это:

library(stringr)
str_extract(mylist, "([^Kα1]\\d)")
#[1] "-1" "s1" "s2" "s3" "s4"

Но перед цифрами в этом выводе стоят буквы. Вот результат, который я хочу:

#[1] "-1" "1" "2" "3" "4"

1 Ответ

2 голосов
/ 17 марта 2020

Вы можете использовать

mylist <- c("Si/Si Kα1 pos-1 map data.tif", "Si/Si Kα1 pos1 map data.tif", "Si/Si Kα1 pos2 map data.tif", "Si/Si Kα1 pos3 map data.tif","Si/Si Kα1 pos4 map data.tif")
regmatches(mylist, regexpr("Kα1.*?\\K-?\\d+", mylist, perl=TRUE))
## => [1] "-1" "1"  "2"  "3"  "4"
## Or, a stringr solution variant:
stringr::str_match(mylist, "Kα1.*?(-?\\d+)")[,2]
## => [1] "-1" "1"  "2"  "3"  "4"

См. Демоверсию R онлайн . См. Демонстрационную версию regex здесь .

Подробности Regex

  • Kα1 - буквальная строка
  • .*? - любые 0+ символов, кроме символов разрыва строки, как можно меньше
  • \K - оператор сброса совпадений, который отбрасывает весь сопоставленный текст так далеко от буфера памяти совпадений
  • -? - необязательный - символ
  • \d+ - одна или несколько цифр.
...