gpt4 book ai didi

r - 在R中用没有首字母@的相同单词替换单词

转载 作者:行者123 更新时间:2023-12-04 10:41:13 26 4
gpt4 key购买 nike

我正在尝试在 R 中进行数据框字符串替换。我需要找到所有以“@”开头的单词(没有空格,例如@word)并将“@”更改为“!” (例如,从@word 到 !word)。同时,它完整地保留了“@”的其他实例(例如@或@@或@[@])。例如,这是我的原始数据框(更改:@def、@jkl、@stu):

> df = data.frame(number = 1:4, text = c('abc @def ghi', '@jkl @ mno', '@[@] pqr @stu', 'vwx @@@ yz'))
> df
number text
1 1 abc @def ghi
2 2 @jkl @ mno
3 3 @[@] pqr @stu
4 4 vwx @@@ yz

这就是我需要的样子:

> df_result = data.frame(number = 1:4, text = c('abc !def ghi', '!jkl @ mno', '@[@] pqr !stu', 'vwx @@@ yz'))
> df_result
number text
1 1 abc !def ghi
2 2 !jkl @ mno
3 3 @[@] pqr !stu
4 4 vwx @@@ yz

我试过

> gsub('@.+[a-z] ', '!', df$text)
[1] "abc !ghi" "!@ mno" "!@stu" "vwx @@@ yz"

但结果并不是我们想要的。非常感谢任何帮助。

谢谢。

最佳答案

怎么样

gsub("(^| )@(\\w)", "\\1!\\2", df$text)
# [1] "abc !def ghi" "!jkl @ mno" "@[@] pqr !stu" "vwx @@@ yz"

这匹配字符串开头或空格后的 @ 符号。然后,我们捕获@符号后面的单词字符,并将@替换为!

解释由 regex101.com 提供:

  • (^| ) 是第一个捕获组; ^ 断言字符串开头的位置; | 表示“或”;空格字面匹配空格字符
  • @ 按字面匹配字符 @(区分大小写)
  • (\\w)是第2个Capturing Group,表示一个单词字符

替换字符串 \\1!\\2 用第一个捕获组 (\\1) 替换正则表达式匹配,后跟 !,然后是第二个捕获组 (\\2)。

关于r - 在R中用没有首字母@的相同单词替换单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43859572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com