R正则表达式匹配字符串的开头和中间
R regex match beginning and middle of a string
我有一个字符串向量:
A <- c("Hello world", "Green 44", "Hot Beer", "Bip 6t")
我想在每个第一个单词的开头和结尾添加一个星号 (*),如下所示:
"*Hello* world", "*Green* 44", "*Hot* Beer", "*Bip* 6t"
使用 stringr
中的 str_replace()
是有意义的。
但是,我正在努力使用正则表达式来匹配每个字符串的第一个单词。
最好的成绩是:
str_replace(A, "^([A-Z])", "*\1*"))
"*H*ello world", "*G*reen 44", "*H*ot Beer", "*B*ip 6t"
我可能希望这是一个简单的任务,但我不喜欢正则表达式。
谢谢!
你快到了
str_replace(A, "(^.*) ", "*\1* ")
#> [1] "*Hello* world" "*Green* 44" "*Hot* Beer" "*Bip* 6t"
你可以使用
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 demo online. See the regex demo online。
([[:alpha:]]+)
正则表达式匹配并将一个或多个字母捕获到第 1 组中,**
替换将匹配替换为 *
+ 第 1 组值 + *
。
请注意,sub
仅查找并替换第一个匹配项,因此每个字符向量中只有第一个单词受到影响。
备注
- 如果您打算将单词 恰好 放在字符串的开头(而不仅仅是“第一个单词”),请在字符串的开头添加
^
模式(例如 sub("^([[:alpha:]]+)", "*\1*", A)
)
- 如果单词是 non-whitespace 个字符的块,请使用
\S+
而不是 [[:alpha:]]+
或 \p{L}+
(例如 sub("^(\S+)", "*\1*", A)
)
- 如果单词是字母或数字或下划线的任何块,您可以使用
\w+
,即 sub("^(\w+)", "*\1*", A)
- 如果单词是任何字母或数字块但不是下划线,则可以使用
[[:alnum:]]+
,即sub("^([[:alnum:]]+)", "*\1*", A)
我有一个字符串向量:
A <- c("Hello world", "Green 44", "Hot Beer", "Bip 6t")
我想在每个第一个单词的开头和结尾添加一个星号 (*),如下所示:
"*Hello* world", "*Green* 44", "*Hot* Beer", "*Bip* 6t"
使用 stringr
中的 str_replace()
是有意义的。
但是,我正在努力使用正则表达式来匹配每个字符串的第一个单词。
最好的成绩是:
str_replace(A, "^([A-Z])", "*\1*"))
"*H*ello world", "*G*reen 44", "*H*ot Beer", "*B*ip 6t"
我可能希望这是一个简单的任务,但我不喜欢正则表达式。
谢谢!
你快到了
str_replace(A, "(^.*) ", "*\1* ")
#> [1] "*Hello* world" "*Green* 44" "*Hot* Beer" "*Bip* 6t"
你可以使用
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 demo online. See the regex demo online。
([[:alpha:]]+)
正则表达式匹配并将一个或多个字母捕获到第 1 组中,**
替换将匹配替换为 *
+ 第 1 组值 + *
。
请注意,sub
仅查找并替换第一个匹配项,因此每个字符向量中只有第一个单词受到影响。
备注
- 如果您打算将单词 恰好 放在字符串的开头(而不仅仅是“第一个单词”),请在字符串的开头添加
^
模式(例如sub("^([[:alpha:]]+)", "*\1*", A)
) - 如果单词是 non-whitespace 个字符的块,请使用
\S+
而不是[[:alpha:]]+
或\p{L}+
(例如sub("^(\S+)", "*\1*", A)
) - 如果单词是字母或数字或下划线的任何块,您可以使用
\w+
,即sub("^(\w+)", "*\1*", A)
- 如果单词是任何字母或数字块但不是下划线,则可以使用
[[:alnum:]]+
,即sub("^([[:alnum:]]+)", "*\1*", A)