我正在按照足球时间表练习我的正则表达式而无法弄明白
我基本上试图将任何主场比赛改为字符串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?
提前致谢
答案 0 :(得分:5)
您的正则表达式语法不正确,您将其包含在级联character classes内,并且您正在尝试使用类中的捕获组,这会导致模式在到达结束时失败{{1} }
简而言之,您的正则表达式当前定义了一组字符(不是您想要的)然后失败。
)
要解决此问题,您需要删除已放置的字符类和捕获组,确保在正则表达式模式中双重转义[[^([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]))