簡體   English   中英

從 R 中特殊字符之間的字符串中刪除 substring

[英]Remove substring from string between special characters in R

我一直在尋找答案,但我失敗了。 我的問題有點奇怪,我還在學習正則表達式。 我想從這個實現:

str1 <- 'txt1/txt2/123|abc_def_123|1991-02-11'

像這樣的東西:

txt1|abc_def_123|1991-02-11

所以從/ (包括)到第一次出現| 應該被刪除。 到目前為止,我寫了這個:

sub("\\/.*\\|", "|", str1 )

但它會刪除最后一次出現的所有內容|

"txt1|1991-02-11"

我怎么能指出 substring 應該被刪除到他第一次出現| ?

您可以使用/[^|]* ,它采用第一個/和之后的所有內容,只要它不是| .

sub("/[^|]*", "", str1)
#[1] "txt1|abc_def_123|1991-02-11"

在您嘗試之后,您可以使您的正則表達式變得懶惰

sub("/.*?\\|", "|", str1 )
#[1] "txt1|abc_def_123|1991-02-11"

您可以使用帶有正前瞻的否定字符 class

/[^|]*(?=\|)

為了不跨越換行符,您可以擴展否定字符 class:

/[^|\r\n]*(?=\|)

正則表達式演示

str1 <- 'txt1/txt2/123|abc_def_123|1991-02-11'
sub("/[^|]*(?=\\|)", "", str1, perl=TRUE)

Output

[1] "txt1|abc_def_123|1991-02-11"

另一種方法是使用反向引用:

sub("(^.*)/.*/.*?(\\|.*$)", "\\1\\2", str1)
[1] "txt1|abc_def_123|1991-02-11"

在這里,雙重反向引用\\1\\2 '召回'兩個捕獲組(...)中的字符串,而捕獲組中未包含的部分被刪除。

暫無
暫無

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

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