首页 > 解决方案 > R 正则表达式中的负前瞻问题

问题描述

我有这种数据:

MWE <- c(
  "World1    2.6       -4.5         1.5          5.0       -0.2",
  "1,2",
  "G20    112.9            -4.1                1.6                        5.7                    0.4"
)

所需的输出是:

[1] "    2.6       -4.5         1.5          5.0       -0.2"                                                      
[2] ""                                                                                                               
[3] "   112.9                         -4.1                    1.6                        5.7                    0.4"

我想区分什么是数字,什么不是(在这种精确的情况下,这"1,2"是数据挖掘中的一个“错误”,是指“G20”的脚注,只是提到它不是我想要的数字)。

因此,我认为格式的正确正则表达式是[-+]?\\d+\\.\\d

它在积极的意义上起作用:

> MWE2 <- gsub("[-+]?\\d+\\.\\d","blah",MWE)  
> MWE2
[1] "World1    blah       blah         blah          blah       blah"                                                     
[2] "1,2"                                                                                                                 
[3] "G20    blah                         blah                    blah                        blah                    blah"

但是,当我尝试通过用消极的前瞻性替换所有不是的东西来隔离价值观时(我从那里了解到这是我正在寻找的东西)(?! ),所以 : (?![-+]?\\d+\\.\\d),但它似乎不起作用(我看过这里并添加了perl=T选项)

> MWE3 <- gsub("(?![-+]?\\d+\\.\\d)","",MWE,perl=T)  
> MWE3
[1] "World1    2.6       -4.5         1.5          5.0       -0.2"                                                      
[2] "1,2"                                                                                                               
[3] "G20    112.9                         -4.1                    1.6                        5.7                    0.4"

标签: rregex

解决方案


推荐阅读