【发布时间】:2013-07-11 22:49:30
【问题描述】:
x <- "what I want to get is THAT THIS is always following"
如何提取在 R 中始终位于字符串 'THIS' 之前的字符串? THAT 实际上是一个从 0 到 inf 的数字,带有不同的小数分隔符、逗号或点。
【问题讨论】:
-
\S*(?= THIS )?如果 r 支持前瞻.. 不熟悉 r.
x <- "what I want to get is THAT THIS is always following"
如何提取在 R 中始终位于字符串 'THIS' 之前的字符串? THAT 实际上是一个从 0 到 inf 的数字,带有不同的小数分隔符、逗号或点。
【问题讨论】:
\S*(?= THIS ) ?如果 r 支持前瞻.. 不熟悉 r.
OP 您的 THIS 和 THAT 令人困惑,考虑改写 OP,this 您在寻找什么?
x <- "what I want to get is THAT THIS is always following"
sub('.* ([^ ]+) THIS .*', '\\1', x)
# [1] "THAT"
【讨论】:
\\S*(?= THIS) 因为 R 确实在 perl 模式下支持 positive and negative lookaheads using this syntax,只需将 perl = TRUE 添加到您的函数调用中,您就应该是金色的。但是,如果您不是,请发表评论。
首先,您必须将 R 中的 \S 转义为 \\S。然后,您可以使用regexpr,它将为您提供匹配的位置(开始和结束)(如果不匹配,则为-1),然后您可以使用regmatches 提取该值。那就是:
regmatches(x, regexpr("\\S*(?= THIS )", x, perl=TRUE))
# [1] "THAT"
【讨论】:
使用gsubfn包中的strapplyc可以使用比较简单的正则表达式:
> library(gsubfn)
> strapplyc(x, "(\\S+) THIS", simplify = TRUE)
[1] "THAT"
【讨论】: