Вы можете использовать
:\s*\K[^:]*?(?=,\s*(?:v|no|p)\.)
См. Демоверсию regex
Подробности
:
- двоеточие \s*
- 0+ пробелов \K
- оператор сброса совпадения [^:]*?
- ноль или более символов, отличных от :
, но каккак можно меньше, поскольку *?
не является жадным (?=,\s*(?:v|no|p)\.)
- положительный прогноз, требующий ,
, затем 0+ пробелов и затем следуют v
, no
или p
с .
сразу справа от текущего местоположения.
В R:
regmatches(references, regexpr(":\\s*\\K[^:]*?(?=,\\s*(?:v|no|p)\\.)", references, perl=TRUE))
См. R демо онлайн :
references <- c(
"Dumitru, T.A., Smith, D., Chang, E.Z., and Graham, S.A., 2001, Uplift, exhumation, and deformation in the Japanese Mt Everest, Paleozoic and Mesozoic tectonic evolution of central Africa: from continental assembly to intracontinental deformation: Journal of Neverland, v. 3, no. 192, p. 71-199.",
"Dumitru, T.A., Smith, D., Chang, E.Z., and Graham, S.A., 2001, Uplift, exhumation, and deformation in the Japanese Mt Everest, Paleozoic and Mesozoic tectonic evolution of central Africa: from continental assembly to intracontinental deformation: Journal of Neverland, no. 3.",
"Dumitru, T.A., Smith, D., Chang, E.Z., and Graham, S.A., 2001, Uplift, exhumation, and deformation in the Japanese Mt Everest, Paleozoic and Mesozoic tectonic evolution of central Africa: from continental assembly to intracontinental deformation: Journal of Neverland, p. 71-199."
)
regmatches(references, regexpr(":\\s*\\K[^:]*?(?=,\\s*(?:v|no|p)\\.)", references, perl=TRUE))
## => [1] "Journal of Neverland" "Journal of Neverland" "Journal of Neverland"
Если вы предпочитаете решение на основе stringr
, используйте
> str_extract(references, "(?<=:\\s)[^:]*?(?=,\\s*(?:v|no|p)\\.)")
[1] "Journal of Neverland" "Journal of Neverland" "Journal of Neverland"
Или, если пробел после :
может быть 0 или много:
> str_match(references, ":\\s*([^:]*?)(?:,\\s*(?:v|no|p)\\.)")[,2]
[1] "Journal of Neverland" "Journal of Neverland" "Journal of Neverland"