R - regmatches中的正则表达式

时间:2017-04-27 20:08:36

标签: r regex

有人可以用下一个正则表达式帮助我吗? 我必须提取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))。

1 个答案:

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