我们说我有一个通常看起来像这样的字符串:
goodString <- "RPT# AMT:123.45 CUR:USD TRDR#"
使用正则表达式和stringr
包,只需传递此代码,我就可以从字符串中提取出我需要的值:
amount <- str_extract(goodString, "(?<=AMT:)\\S+")
但是,我们说我们有这样的异常:
badString <- "RPT# AMT: 1, 234.5 6 CUR:USD TRDR#"
当空格是零星的并且不总是在那里时,如何从该字符串中提取值1,234.56?
答案 0 :(得分:1)
这是一个使用stringr的方法,如果您的输入中有多个数字,则该方法应该有效(只要相关数量后跟一些非数字文本):
library("magrittr")
library("stringr")
amount <- badString %>%
str_extract("(?<=AMT:\\s{0,20})[\\s0-9.,]+") %>%
str_replace_all("[\\s,]", "")) %>%
as.numeric
请注意,假设AMT:和数字之间的间距不超过20个;后视模式匹配必须有一个有限的长度。
答案 1 :(得分:1)
您可以减去非数字部分,而不是提取数字部分:
as.numeric(gsub("[^0-9.]","",x))