我有一個字串向量:
A <- c("Hello world", "Green 44", "Hot Beer", "Bip 6t")
我想在每個第一個單詞的開頭和結尾添加一個星號 (*),如下所示:
"*Hello* world", "*Green* 44", "*Hot* Beer", "*Bip* 6t"
str_replace()使用from有意義stringr。但是,我正在努力使用正則運算式來匹配每個字串的第一個單詞。
最好的成績是:
str_replace(A, "^([A-Z])", "*\\1*"))
"*H*ello world", "*G*reen 44", "*H*ot Beer", "*B*ip 6t"
我可能希望這是一項簡單的任務,但我與正則運算式不相處。
謝謝!
uj5u.com熱心網友回復:
你快到了
str_replace(A, "(^.*) ", "*\\1* ")
#> [1] "*Hello* world" "*Green* 44" "*Hot* Beer" "*Bip* 6t"
uj5u.com熱心網友回復:
您可以使用
sub("([[:alpha:]] )", "*\\1*", A)
## => [1] "*Hello* world" "*Green* 44" "*Hot* Beer" "*Bip* 6t"
stringr等效的是
library(stringr)
stringr::str_replace(A, "([[:alpha:]] )", "*\\1*")
stringr::str_replace(A, "(\\p{L} )", "*\\1*")
在線查看R 演示。在線查看正則運算式演示。
正([[:alpha:]] )則運算式匹配并將一個或多個字母捕獲到組 1 中,*\1*替換將匹配替換為* 組 1 值 *。
請注意,sub僅查找和替換第一個匹配項,因此每個字符向量中只有第一個單詞受到影響。
筆記
- 如果您打算將單詞精確地包裝在字串的開頭(不僅僅是“第一個單詞”),
^請在模式的開頭添加(例如sub("^([[:alpha:]] )", "*\\1*", A)) - 如果單詞是一大塊非空白字符,請使用
\S代替[[:alpha:]]或\p{L}(例如sub("^(\\S )", "*\\1*", A)) - 如果單詞是任何字母或數字或下劃線,您可以使用
\w,即sub("^(\\w )", "*\\1*", A) - 如果單詞是任何字母或數字但不是下劃線,您可以使用
[[:alnum:]],即sub("^([[:alnum:]] )", "*\\1*", A)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/456719.html
下一篇:拆分行中的字串以分隔R中的列
