【问题标题】:Split the character vector into two parts [closed]将字符向量分成两部分[关闭]
【发布时间】:2016-08-24 17:52:58
【问题描述】:

考虑以下长度为 1 的字符向量:

l <- "http://www.idealo.de/preisvergleich/OffersOfProduct/4983410_-iphone-se-64gb-spacegrau-apple.html"

我想把它分成两部分,所以第一部分应该是:

p1 <- "http://www.idealo.de/preisvergleich/OffersOfProduct/4983410"

第二个:

p2 <- "_-iphone-se-64gb-spacegrau-apple.html"

当然,必须使用正则表达式来解决问题。请您给我一些见解,我可以轻松地学习使用正则表达式进行操作。如有任何帮助,我将衷心感谢。

【问题讨论】:

标签: regex r split


【解决方案1】:

使用"(?&lt;=[^_])(?=_)"strsplit 可以满足您的需求:

strsplit(l, "(?<=[^_])(?=_)", perl = T)

# [[1]]
# [1] "http://www.idealo.de/preisvergleich/OffersOfProduct/4983410"
# [2] "_-iphone-se-64gb-spacegrau-apple.html" 

【讨论】:

  • 如果另一个下划线出现在_ OP 想要拆分的位置之前怎么办?
  • @WiktorStribiżew 这意味着必须指定对拆分位置的更多约束。但也有可能数据仅包含一个可能事先已知的下划线。我同意 OP 不是很清楚这一点。
  • 好吧,我可以补充一点,在这种情况下你可以使用(?=_[^_]*$)lookahead,但最初的问题并不清楚。
【解决方案2】:

如果您有兴趣在不使用正则表达式的情况下处理此问题,您始终可以使用 stringr 包中的 str_split 之类的函数来分隔此字符串。

library(stringr)
l <- "http://www.idealo.de/preisvergleich/OffersOfProduct/4983410_-iphone-se-64gb-spacegrau-apple.html"
split = stringr::str_split_fixed(l,pattern = "_",2)
p1 = split[1]
p2 = split[2]

【讨论】:

  • 这不会产生预期的结果。另外,如果之前某处出现另一个下划线怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多