【发布时间】:2020-03-17 16:36:13
【问题描述】:
我有一个字符串列表。我想在字符串“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"
【问题讨论】:
-
你想要
str_extract(mylist, "-?(?<![Kα1])\\d+"),我想。您的意思是仅提取特定数字还是任意数字? -
谢谢@Wiktor Stribiżew!我只想要字符串之后出现的第一个数字。你的模式给了我正确的输出。
-
请编辑问题,因为现在听起来好像您只需要
-?\d+。如果需要确保需要提取的值前没有K、α和1,则应写为要求。 -
所以,我最初的解决方案是错误的,我发布了正确的解决方案。
-
如果您只能使用
stringr,请使用stringr::str_match(mylist, "Kα1.*?(-?\\d+)")[,2]。\K在 stringr 正则表达式函数中使用的 ICU 正则表达式中不受支持。为此,我们需要一个 PCRE 正则表达式引擎。而且您不能使用str_extract(mylist, "(?<=Kα1.*?)-?\\d+"),因为ICU 正则表达式引擎不支持lookbehinds 中的未知宽度模式。