使用正则表达式在向量中分割特定的字符串

霓虹灯蓝色头发

我有一个字符串向量,其中一些包括标点符号。例如:

words <- ("hi", "my.", "name!", "is98", ""joe"")

我的目标是创建一个包含所有这些单词的向量,但标点符号,数字和符号在向量中被制成自己的字符串。所以在这种情况下

("hi", "my", ".", "name", "!", "is", "98", """, "joe", """)

我最初的计划是使用grep标识存在标点符号的索引,然后遍历它们,strsplit并根据所述标点符号对它们进行划分,如下所示:

puncIndex <- grep('[\\"!?.^]', words)
for(i in puncIndex){
  strsplit(words[i], '[\\"!?.^]')
}

但是我有几个问题。一个原因是,我意识到的结果strsplit将是一个列表本身,并且我想不出如何干净地将每个分量移回原始向量。另一个是即使我只尝试strsplit一个单词,它也只会返回第一部分。例如:

strsplit(words[2], ".")
[[1]]
[1] "my"

编辑:添加数字作为一个类也要分开

阿维纳什·拉吉(Avinash Raj)

只需在中间存在的单词边界处拆分即可。

words <- c("hi", "my.", "name!", "is", '"joe"')
unlist(strsplit(words, '(?<=.)\\b(?=.)', perl=TRUE))
#[1] "hi"   "my"   "."    "name" "!"    "is"   "\""   "joe" 
#[9] "\"" 

这里的技巧\\b称为单词边界,它在单词char和非单词char之间进行匹配(反之亦然)。因此,如果起始字符和结束字符是单词字符,则仅此一项即可匹配起始字符和结束字符。但是使用断言,可以确保在单词边界前后必须至少存在一个字符。

更新:

library(stringr)
unlist(str_extract_all(words, '[A-Za-z]+|[^A-Za-z]+'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用正则表达式从字符串中分割数字

来自分类Dev

使用正则表达式分割字符串

来自分类Dev

如何在正则表达式模式下不在clojure中分割字符串

来自分类Dev

尝试使用特定的正则表达式表达式拆分字符串

来自分类Dev

正则表达式分割字符串

来自分类Dev

在正则表达式前分割字符串

来自分类Dev

通过正则表达式分割字符串

来自分类Dev

在正则表达式上分割字符串

来自分类Dev

正则表达式模式以分割字符串

来自分类Dev

正则表达式分割多行字符串

来自分类Dev

在正则表达式前分割字符串

来自分类Dev

使用正则表达式从字符串中提取特定字符串

来自分类Dev

如何使用正则表达式从字符串中删除特定字符串

来自分类Dev

使用正则表达式将字符串分割为每个特殊字符

来自分类Dev

正则表达式匹配特定字符串

来自分类Dev

正则表达式提取特定的字符串

来自分类Dev

正则表达式特定的匹配字符串

来自分类Dev

正则表达式排除特定字符串?

来自分类Dev

特定字符串格式的正则表达式

来自分类Dev

正则表达式与特定字符串匹配

来自分类Dev

特定字符串的正则表达式

来自分类Dev

正则表达式排除特定字符串

来自分类Dev

特定字符串/路径的正则表达式

来自分类Dev

特定字符串的正则表达式

来自分类Dev

在PostgreSQL中使用正则表达式分割地址字符串,但保留数字

来自分类Dev

Javascript-使用正则表达式分割字符串

来自分类Dev

分割字符串数组在Java中使用正则表达式

来自分类Dev

使用正则表达式分组分割多个符号字符串的数组

来自分类Dev

在R中使用正则表达式分割字符串