有人可以用下一个正则表达式帮助我吗? 我必须提取with_reg_expr中的内容
table=data.frame(col=c("1.8 20v 150cv turbo","1.6 8v 102cv","1.6 3-p","ro 35i 3.0 24v 306cv","polo 1.8 turbo"))
real_column with_reg_expr
1.8 20v 150cv turbo 1.8 20v 150cv
1.6 8v 102cv 1.6 8v 102 cv
1.6 v8 102cv 1.6 v8 102 cv
1.6 3-p 1.6
ro 35i 3.0 24v 306cv 35i 3.0 24v 306cv
polo 1.8 turbo 1.8
我考虑使用这些表达式
[0-9].[0-9]
{[0-9],2}v | v{[0-9],2}
{[0-9],3}cv
{[0-9],}i
使用函数regmatches(table $ col,regexpr(“[0-9]。[0-9]”,table $ col))。
答案 0 :(得分:1)
您可以使用
x <- c("1.8 20v 150cv turbo", "1.6 8v 102cv", "1.6 v8 102cv", "1.6 3-p", "ro 35i 3.0 24v 306cv", "polo 1.8 turbo")
regmatches(x, gregexpr("\\bv?\\d+(?:\\.\\d+)?(?:c?v?|i)(?!\\S)", x, perl=TRUE))
请参阅R demo online。请参阅regex demo。
解释:
\b
- 领先的单词边界v?
- 可选的v
\d+
- 1+位数(?:\.\d+)?
- .
的可选序列,后跟1+位数(?:c?v?|i)
- i
或可选的c
,后跟可选的v
(?!\S)
- 一个负向前瞻断言,需要在当前位置右侧立即使用空格或字符串结尾。 输出:
[[1]]
[1] "1.8" "20v" "150cv"
[[2]]
[1] "1.6" "8v" "102cv"
[[3]]
[1] "1.6" "v8" "102cv"
[[4]]
[1] "1.6"
[[5]]
[1] "35i" "3.0" "24v" "306cv"
[[6]]
[1] "1.8"