簡體   English   中英

正則表達式在R中查找特定模式

[英]Regex to find specific pattern in R

我有一個如下的數據集:

 dput(d1)
structure(list(FNUM = structure(1L, .Label = "20140824-0227", class = "factor"), 
    DESCRIPTION = "From : J LTo : feedback@lsd.goe.sfcc : Bcc : Sent On : Mon Apr 13 08:59:18 S 2015Subject : RE:Re: Suspect illegally modified vehiclesBody : Our Ref: BS-CT-1408-0665Date : 2-Apr-2015Our Ref: 2015/Jan/3224Date : 2-Apr-2015Thank you very much! Please conduct a thorough check on the vehicle other than the exhaust system. Warm regards,J L--------------------------------------------On Mon, 4/13/15, feedback@lsd.goe.sf <feedback@lsd.goe.sf> wrote: Subject: RE:Re: Suspect illegally modified vehicles To: jl1229@yahoo.ca Received: Monday, April 13, 2015, 8:56 AM  Our Ref: GCE/VS/VS/VE/F20.000.000/38104 Date : 8-Apr-2015 Tel : 1800 2255 582 Fax : 6553 5329  -------------------------------------------- On Mon, 4/6/15, feedback@lsd.goe.sf <feedback@lsd.goe.sf> wrote:   Subject: Suspect illegally modified vehicles  To: joa@dccs.ca  Received: Monday, April 6, 2015, 11:06 AM    Our Ref:  GCE/VS/VS/VE/F20.000.000/37661  Date : 2-Apr-2015  Tel : 1812 2235 582  Fax : 6553 5329        Dear Ms L     Our records show that the vehicle bearing registration"), .Names = c("FNUM", 
"DESCRIPTION"), row.names = "1", class = "data.frame")

我使用下面的regex來標識Our Ref:Our Ref:

> gsub(" *(Our Ref|Date) *:? *","",regmatches(d1[1,2],gregexpr("Our Ref *:[^:]+",d1[1,2]))[[1]])

[1] "BS-CT-1408-0665"                "2015/Jan/3224"                 
[3] "GCE/VS/VS/VE/F20.000.000/38104" "GCE/VS/VS/VE/F20.000.000/37661" 

但是我只想要以GCE開頭的Our Ref:值, Our Ref:如何將輸出限制為以GCE開頭的值。

所需結果:

[1] "GCE/VS/VS/VE/F20.000.000/38104" "GCE/VS/VS/VE/F20.000.000/37661" 

問題第二部分的更新

dput(d1)
structure(list(FNUM = structure(1L, .Label = "20140824-0227", class = "factor"), 
    DESCRIPTION = "From : J LTo : feedback@lsd.goe.sfcc : Bcc : Sent On : Mon Apr 13 08:59:18 S 2015Subject : RE:Re: Suspect illegally modified vehiclesBody : Our Ref: BS-CT-1408-0665Date : 2-Apr-2015Our Ref: 2015/Jan/3224Date : 2-Apr-2015Thank you very much! Please conduct a thorough check on the vehicle other than the exhaust system. Warm regards,J L--------------------------------------------On Mon, 4/13/15, feedback@lsd.goe.sf <feedback@lsd.goe.sf> wrote: Subject: RE:Re: Suspect illegally modified vehicles To: jl1229@yahoo.ca Received: Monday, April 13, 2015, 8:56 AM  Our Ref: GCE/VS/VS/VE/F20.000.000/38104 Date : 8-Apr-2015 Tel : 1800 2255 582 Fax : 6553 5329  -------------------------------------------- On Mon, 4/6/15, feedback@lsd.goe.sf <feedback@lsd.goe.sf> wrote:   Subject: Suspect illegally modified vehicles  To: joa@dccs.ca  Received: Monday, April 6, 2015, 11:06 AM    Our Ref:  GCE/QSMO/SQSS/SQ/F20.000.000/503533/lc  Date : 2-Apr-2015  Tel : 1812 2235 582  Fax : 6553 5329     Our Ref:  GCE/CC/PCF/FB/F20.000.000/233546/SK/PW  Date : 2-Apr-2015     Dear Ms L     Our records show that the vehicle bearing registration  "), .Names = c("FNUM", 
"DESCRIPTION"), row.names = "1", class = "data.frame")

> gsub(" *(Our Ref|Date) *:? *","",regmatches(d1[1,2],gregexpr("Our Ref *:\\s+GCE[^:]+",d1[1,2]))[[1]])
[1] "GCE/VS/VS/VE/F20.000.000/38104"         "GCE/QSMO/SQSS/SQ/F20.000.000/503533/lc"
[3] "GCE/CC/PCF/FB/F20.000.000/233546/SK/PW"

但是我想將結果限制為

[1] "GCE/VS/VS/VE/F20.000.000/38104"         "GCE/QSMO/SQSS/SQ/F20.000.000/503533"
[3] "GCE/CC/PCF/FB/F20.000.000/233546"

我只希望v1/v2/v3/v4/v5/v6之后的6 values被刪除或ends with number after 5 /(slashes) GCE/QSMO/SQSS/SQ/F20.000.000/503533/lc應更改為GCE/QSMO/SQSS/SQ/F20.000.000/503533GCE/CC/PCF/FB/F20.000.000/233546/SK/PW應更改為GCE/CC/PCF/FB/F20.000.000/233546

您可以添加一個要求,即在您的[^:]之前必須出現“ GCE”(在其前面有空格)

regmatches(d1[1,2],gregexpr("Our Ref *:\\s+GCE[^:]+",d1[1,2]))

編輯:嘗試此操作,您可以使用{n}匹配n次,

gsub(" *(Our Ref|Date) *:? *", "",
     regmatches(d1[1,2], 
                gregexpr("Our Ref *:\\s+GCE(/[^/-]+){5}", 
                         d1[1,2], perl=T))[[1]])

這是一種使用strpslit一次或多次對任何非數字字符進行分割的不同方法: \\\\D+后跟一個空格:

splts <- strsplit(d1$DESCRIPTION, "\\D+ ")[[1]]
splts[grep("GCE", splts)]
# [1] "GCE/VS/VS/VE/F20.000.000/38104"      "GCE/QSMO/SQSS/SQ/F20.000.000/503533"
# [3] "GCE/CC/PCF/FB/F20.000.000/233546"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM