【发布时间】:2014-03-06 20:31:18
【问题描述】:
我已经问过相关问题HERE 和HERE。我试图概括这些答案,但失败了。
基本上,我想将一个字符串拆分为单词、数字和任何类型的标点符号,但我想保留撇号。这是我尝试过的,我非常接近(我认为):
x <- "Raptors don't like robots! I'd pay $500.00 to rid them."
strsplit(x, "(\\s+)|(?=[[:punct:]])", perl = TRUE)
## [[1]]
## [1] "Raptors" "don" "'" "t" "like" "robots" "!"
## [8] "" "I" "'" "d" "pay" "$" "500" "." "00" "to"
## [20] "rid" "them" "."
这是我想要的:
## [[1]]
## [1] "Raptors" "don't" "like" "robots" "!" "" "I'd"
## [8] "pay" "$" "500" "." "00" "to" "rid" "them" "."
虽然我想要一个基本解决方案,但我希望看到其他解决方案(我确信有人有一个 stringr 解决方案),这使得问题对其他人更普遍。
注意: R 有一个特定的正则表达式系统。您需要熟悉 R 才能回答这个问题。
【问题讨论】:
-
(好奇)R 的正则表达式有什么特点?
-
我很困惑你链接到的第一个问题与这个问题不完全相同?
-
@Jongware,例如转义特殊字符存在问题。
-
@eddi 第一个问题删除了字符,这里我不删除它们,我想要它们。我使用这两个问题中的信息来尽可能地了解我(相似但不相同)。
-
@TylerRinker 你能举个例子吗?对于您当前的示例:
identical(strsplit(x, "[[:space:]]|(?=[^'[:^punct:]])", perl=TRUE), strsplit(x, "(\\s+)|(?!')(?=[[:punct:]])", perl = TRUE)) # [1] TRUE