【问题标题】:strsplit on all spaces and punctuation except apostrophes [duplicate]strsplit 除了撇号之外的所有空格和标点符号[重复]
【发布时间】:2014-03-06 20:31:18
【问题描述】:

我已经问过相关问题HEREHERE。我试图概括这些答案,但失败了。

基本上,我想将一个字符串拆分为单词、数字和任何类型的标点符号,但我想保留撇号。这是我尝试过的,我非常接近(我认为):

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

标签: regex r


【解决方案1】:

您可以使用否定前瞻(?!')

strsplit(x, "(\\s+)|(?!')(?=[[:punct:]])", perl = TRUE)
#  [1] "Raptors" "don't"   "like"    "robots"  "!"       ""        "I'd"     "pay"     "$"       "500"     "."       "00"      "to"      "rid"     "them"    "."

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 2017-03-26
    • 2013-02-21
    • 2019-08-25
    • 1970-01-01
    相关资源
    最近更新 更多