[英]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.