我正在使用stringr
,但解决方案不一定如此。在下面的字符串中,我想用下划线替换左边和右边(即前2)字母的所有空格。
str = 'ab cd ef 29 17 2 3'
stringr的replace_all
似乎不支持子字符串匹配(如str_match_all
封闭(...)
)。并且str_match_all
不会取代。感谢建议。
答案 0 :(得分:4)
将gsub
功能与基于环绕声的正则表达式一起使用。
> str = 'ab cd ef 29 17 2 3'
> gsub("(?<=[A-Za-z])\\s+(?=[A-Za-z])", "_",str, perl=T)
[1] "ab_cd_ef 29 17 2 3"
OR
> gsub("[A-Za-z]\\K\\s+(?=[A-Za-z])", "_",str, perl=T)
[1] "ab_cd_ef 29 17 2 3"
OR
> library(stringr)
> str_replace_all('ab cd ef 29 17 2 3', perl('(?<=[A-Za-z])\\s+(?=[A-Za-z])'), '_')
[1] "ab_cd_ef 29 17 2 3"
答案 1 :(得分:2)
(?<=[a-zA-Z])[ ](?=[a-zA-Z])
这应该为你做。看看后面会确保你有空格背后的信。
前瞻将确保你前面有一封信。参见演示。
答案 2 :(得分:1)
这是另一种可能性:
gsub("([[:alpha:]])(\\s+)([[:alpha:]])", "\\1_\\3", x)
## "ab_cd_ef 29 17 2 3"