如何使用正则表达式查找可能散布空格的值

时间:2015-06-25 16:36:04

标签: regex r

我们说我有一个通常看起来像这样的字符串:

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?

2 个答案:

答案 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))