在带stringr的字符串后提取带符号的数字

在带stringr的字符串后提取带符号的数字,r,regex,stringr,R,Regex,Stringr,我有一个字符串列表。我想返回字符串“Kα1”后面带符号的数字 但在输出中,数字之前有字母。这就是我想要的结果: #[1] "-1" "1" "2" "3" "4" 你可以用 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 dat

我有一个字符串列表。我想返回字符串“Kα1”后面带符号的数字

但在输出中,数字之前有字母。这就是我想要的结果:

#[1] "-1" "1" "2" "3" "4"
你可以用

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"
mylist[1]“-1”“1”“2”“3”“4”
##或者,stringr解决方案变体:
stringr::str_match(mylist,“Kα1.*?(\\d+))[,2]
## => [1] "-1" "1"  "2"  "3"  "4"
看。看

正则表达式详细信息

  • Kα1
    -文本字符串
  • *?
    -除换行符以外的任何0+字符,尽可能少
  • \K
    -一种匹配重置运算符,用于丢弃迄今为止与匹配内存缓冲区匹配的所有文本
  • -?
    -可选的
    -
    符号
  • \d+
    -一个或多个数字

您想要
str_extract(mylist),-?(?谢谢@Wiktor Stribiżew!我只想要字符串后面出现的第一个数字。您的模式给了我正确的输出。请编辑这个问题,因为现在听起来好像您需要的只是
-?\d+
。如果您需要确保在需要提取的值之前没有
K
α
1
,请编辑它应该按要求编写。因此,我的初始解决方案是错误的,我发布了正确的解决方案。如果您只能使用
stringr
,请使用
stringr::str_match(mylist,“Kα1.*?(\\d+)[,2]
\K
在stringr正则表达式函数中使用的ICU正则表达式中不受支持。我们需要一个PCRE正则表达式引擎来实现这一点。并且您不能使用
stru extract(mylist)(?)?
#[1] "-1" "1" "2" "3" "4"
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"