Вы можете использовать str_match и использовать (?i)
, чтобы получить регистр без учета регистра и захватить 4 цифры в группе 1:
(?i)-[CP]-([0-9]{4})
R demo | Regex demo
Например:
library(stringr)
text = "123-4567-C-4321-DD.xxxx"
pattern = "(?i)-[CP]-([0-9]{})"
print(str_match(text, pattern)[,2])
Результат
[1] "4321"
Или использовать положительный вид сзади:
pattern = "(?i)(?<=-[CP]-)[0-9]{4}"
print(str_match(text, pattern)[,1])
Примечание
В классе символов труба |
не означает или является литералом канала.
Если вы начинаете символкласс с ^
отрицает то, что ему разрешено совпадать, поэтому ваш шаблон [^c|C,p|P-]{4}
соответствует 4 раза, а не c
, C
, P
, p
, |
, ,
или -