繁体   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