在带stringr的字符串后提取带符号的数字
我有一个字符串列表。我想返回字符串“Kα1”后面带符号的数字 但在输出中,数字之前有字母。这就是我想要的结果:在带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
#[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"