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

时间:2014-08-30 16:26:29

标签: regex 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?

提前致谢

1 个答案:

答案 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]))