我有一个数据框,其中包含一个完整的文本列。我需要捕获一个短语后面的数字(可能是长度最可能为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回顾,我有时会错误地获得该区域。如果有人可以帮助我使用先行正则表达式或类似的字符串,我会很感激。正则表达式对我来说是一个弱点。非常感谢提前。
答案 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)
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
答案 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
希望这会有所帮助。