gpt4 book ai didi

r中的正则表达式替换没有特殊字符的字符串

转载 作者:行者123 更新时间:2023-12-05 01:02:53 24 4
gpt4 key购买 nike

我正在足球赛程表上用 r 练习我的正则表达式,但无法弄清楚这一点

我本质上是在尝试将任何家庭游戏更改为字符串 HOME。这是我正在使用的 schedule_team 数据帧的片段:

  Team   w1   w2   w3   w4   w5   w6   w7   w8   w9  w10  w11  w12  w13  w14
1 ARI SD @NYG SF BYE @DEN WSH @OAK PHI @DAL STL DET @SEA @ATL KC
2 ATL NO @CIN TB @MIN @NYG CHI @BAL DET BYE @TB @CAR CLE ARI @GB
3 BAL CIN PIT @CLE CAR @IND @TB ATL @CIN @PIT TEN BYE @NO SD @MIA

非主队有一个@ 符号开始字符串。主队没有。在 python 中使用正则表达式我相信所有主队都可以使用正则表达式进行选择,例如:^([A-Z])\w+ .. 基本上是说以大写开头。由于\w 以及其他错误,这在 R 中不起作用。

这是我尝试过的(但失败了):
str_replace_all(as.matrix(schedule_teams), "[[^([A-Z])\w+]]", "HOME")

有没有更简单的方法可以将所有主队更改为 HOME?

提前致谢

最佳答案

您的正则表达式语法不正确,您将其包裹在级联 character classes 中并且您正在尝试在类中使用捕获组,这会导致模式在到达结束时失败 )
简而言之,您的正则表达式当前定义了一组字符( 不是您想要的 )然后失败。

[[^([A-Z]  # any character of: '[', '^', '(', '[', 'A' to 'Z' 

要解决此问题,您需要删除放置在其中的字符类和捕获组,确保双重转义 \w在您的正则表达式模式中,然后它应该适合您。

我在我的控制台上测试了它,它运行良好。
> df[,-1] <- str_replace_all(as.matrix(df[,-1]), '^[A-Z]\\w+', 'HOME')
## Team w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14
## 1 ARI HOME @NYG HOME HOME @DEN HOME @OAK HOME @DAL HOME HOME @SEA @ATL HOME
## 2 ATL HOME @CIN HOME @MIN @NYG HOME @BAL HOME HOME @TB @CAR HOME HOME @GB
## 3 BAL HOME HOME @CLE HOME @IND @TB HOME @CIN @PIT HOME HOME @NO HOME @MIA

除了使用 stringr库,您可以使用 sub 执行此操作如果你坚持使用正则表达式。
> df[,-1] <- sub('^[A-Z]\\w+', 'HOME', as.matrix(df[,-1]))

这是一种不使用正则表达式的方法:
> m <- as.matrix(df[-1])
> m[substr(m,0,1) != '@'] <- 'HOME'
> cbind(df[1], m)
## Team w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14
## 1 ARI HOME @NYG HOME HOME @DEN HOME @OAK HOME @DAL HOME HOME @SEA @ATL HOME
## 2 ATL HOME @CIN HOME @MIN @NYG HOME @BAL HOME HOME @TB @CAR HOME HOME @GB
## 3 BAL HOME HOME @CLE HOME @IND @TB HOME @CIN @PIT HOME HOME @NO HOME @MIA

关于r中的正则表达式替换没有特殊字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25584518/

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