使用R使用正则表达式从字符串中提取所需的文本

时间:2016-11-27 04:32:06

标签: r regex

我正在读取data.csv文件的列,并尝试使用正则表达式从列中的字符串中的最后一个正斜杠之前提取所需的文本。我的列数据如下:

class:

org/apache/flume/api/virtual/loeadBalancing.java
org/apache/flume/file/Channel/testing/test2.java
org/apache/flume/recoverable/memory/test1.java
org/apache/flume/source/scribe/LogEntry.java
org/apache/flume/source/jms/TestJMSMessageConsumer.java

我想要的输出是:

org/apache/flume/ap/virtual
org/apache/flume/file/Channel/testing
org/apache/flume/recoverable/memory
org/apache/flume/source/scribe
org/apache/flume/source/jms/TestJMSMessageConsumer

所以,基本上,我试图从类colum中提取子字符串,排除后面出现的文本和反冲。我目前的代码是:

dfkg<- gsub( "\\.[^/]*$", "", data$class) 

有人可以更正我的常规字符串以生成所需的输出吗?

1 个答案:

答案 0 :(得分:1)

我们可以匹配/后跟一个或多个不是/[^/]+)的字符,直到字符串结尾($)并替换它空白("")。

sub("/[^/]+$", "", data$class)
#[1] "org/apache/flume/api/virtual"          "org/apache/flume/file/Channel/testing" "org/apache/flume/recoverable/memory"  
#[4] "org/apache/flume/source/scribe"        "org/apache/flume/source/jms"      

在OP的代码

gsub( "\\.[^/]*$", "", data$class) 

它匹配一个点(\\.)后跟零个或多个不是/[^/]*)的字符,直到字符串结尾($) 。因此,基本上它首先匹配.后面的.java,后跟java/没有任何"",并将其替换为sub("\\.[^.]+\\.[^.]+$", "", 'org.apache.flume.api.virtualloeadBalancing.java' ) #[1] "org.apache.flume.api"

根据OP的评论,

IndexPath