如何只获取在2个点的模式之前出现的字符串的那一部分?

时间:2017-10-13 16:44:08

标签: r regex pattern-matching gsub

我使用了正则表达式的代码,它只在第二次出现点之前获取了东西。以下是代码: -

$array

但是现在我意识到我想在第一次出现2点模式之前拍摄这些东西。

我试过

colnames(final1)[i] <- gsub("^([^.]*.[^.]*)..*$", "\\1", colnames(final)[i])

但它没有工作

尝试的例子 KC1.Comdty ... PX_LAST ... USD ...... Comdty ........

转换为

KC1.Comdty。

&#34; LIT.US.Equity ... PX_LAST ... USD ...... Comdty ........&#34;

&#34; LIT.US.Equity&#34;

有人可以提出任何建议吗? 感谢

2 个答案:

答案 0 :(得分:1)

我们可以使用sub匹配2个或更多点后跟其他字符,并将其替换为空白

sub("\\.{2,}.*", "", str1)
#[1] "KC1.Comdty"    "LIT.US.Equity"

.是一个暗示任何角色的元字符。因此,我们需要转义(\\.)以获得字符

的字面含义

数据

str1 <- c("KC1.Comdty...PX_LAST...USD......Comdty.......", "LIT.US.Equity...PX_LAST...USD......Comdty........")

答案 1 :(得分:1)

strsplit的另一种解决方案:

str1 <- c("KC1.Comdty...PX_LAST...USD......Comdty.......", "LIT.US.Equity...PX_LAST...USD......Comdty........")

sapply(strsplit(str1, "\\.{2}\\w"), "[", 1)
# [1] "KC1.Comdty."    "LIT.US.Equity."

要在@ akrun的答案中包含最后一个点,可以这样做:

sub("\\.{2}\\w.*", "", str1)
# [1] "KC1.Comdty."    "LIT.US.Equity."