R str_replace_all 除了句点和破折号

R str_replace_all except periods and dashes

我正在尝试替换除“.”之外的所有标点符号和 "not words"。和字符串中的“-”,但我正在努力寻找正确的组合来设置正则表达式。

我一直在 R 中使用以下 str_replace_all() 代码,但现在我想指定忽略“.”和 ”-”。我已尝试将其设置为包含 [^.-] 和 ([.-]) 之类的内容,但我没有获得所需的输出。

str_replace_all("[APPLE/O.ORANGE*PLUM-11]", regex("[\W+,[:punct:]]", perl=T)," ")

" APPLE O ORANGE PLUM 11 " #current output

" APPLE O.ORANGE PLUM-11 " #desired output

如有任何建议,我们将不胜感激。谢谢!

使用 ^ 可能更容易,这意味着它匹配括号内未引用的所有内容。通过在框中包含所有字母、数字、. 和 -,您不会替换它们。

library(stringr) 
str_replace_all("[APPLE/O.ORANGE*PLUM-11]", "[^a-zA-Z0-9.-]"," ")

请注意 str_replace_all 不允许使用 PCRE 模式,stringr library 由 ICU 正则表达式驱动。

您需要做的事情可以通过使用以下模式的基本 R gsub 来完成:

> x<-"[APPLE/O.ORANGE*PLUM-11]"
> gsub("[^\w.-]", " ", x, perl=TRUE)
[1] " APPLE O.ORANGE PLUM-11 "

参见R demo online. Also, see the regex online demo here

[^\w.-] 模式匹配除(因为 [^...] 是否定字符 class)以外的任何字符 word char (letter, digit, _), .-.