在R中提取特定文本后面的数字

时间:2016-03-11 02:48:53

标签: regex r stringr

我有一个数据框,其中包含一个完整的文本列。我需要捕获一个短语后面的数字(可能是长度最可能为1到4位的任意数字位数),即' Floor Area' '建筑面积' 。我的数据如下所示:

"A beautiful flat on the 3rd floor with floor area: 50 sqm and a lift"
"Newbuild flat. Floor Area: 30 sq.m" 
"6 bed house with floor area 50 sqm, lot area 25 sqm"

如果我试图提取数字,或者如果我从sqm回顾,我有时会错误地获得该区域。如果有人可以帮助我使用先行正则表达式或类似的字符串,我会很感激。正则表达式对我来说是一个弱点。非常感谢提前。

5 个答案:

答案 0 :(得分:4)

我建议使用来自 stringr div [onClick address MyAction] [text "click in here"] 捕获机制并获取第二列值(str_match):

[,2]

正则表达式匹配:

  • > library(stringr) > v <- c("A beautiful flat on the 3rd floor with floor area: 50 sqm and a lift","Newbuild flat. Floor Area: 30 sq.m","6 bed house with floor area 50 sqm, lot area 25 sqm") > str_match(v, "(?i)\\bfloor area:?\\s*(\\d+)\\s*sq")[,2] [1] "50" "30" "50" - 以不区分大小写的方式
  • (?i) - 整个单词(\\bfloor area:?是单词边界)\b后跟可选的floor area(一次或零次出现,:)< / LI>
  • ? - 零个或多个空格
  • \\s* - 第1组(将在(\\d+)中)捕获一个或多个数字
  • [,2] - 零个或多个空格符号(\\s*sq)后跟\s*(如果不需要则删除或根据需要进行调整)。

答案 1 :(得分:0)

你需要lookbehind正则表达式。

str_extract_all(x, "\\b[Ff]loor [Aa]rea:?\\s*\\K\\d+", perl=T)

str_extract_all(x, "(?i)\\bfloor area:?\\s*\\K\\d+", perl=T)

DEMO

Donno为什么以上代码不会返回任何内容。您也可以尝试sub

> sub(".*\\b[Ff]loor\\s+[Aa]rea:?\\s*(\\d+).*", "\\1", x)
[1] "50" "30" "50"

答案 2 :(得分:0)

以下正则表达式可以帮助您入门:

For Each sheet In Sheets
If wb2.Sheets("Sheet1").Range("A" & i) = sheet.Name Then
      sheet.Activate
End If
Next

The DEMO.

答案 3 :(得分:0)

使用以下正则表达式与Case Insensitive匹配:

DropDownStyle

答案 4 :(得分:0)

text<- "A beautiful flat on the 3rd floor with floor area: 50 sqm and a lift"

unique(na.omit(as.numeric(unlist(strsplit(unlist(text), "[^0-9]+")))))
# [1]  3 50

希望这会有所帮助。