簡體   English   中英

r中的正則表達式替換沒有特殊字符的字符串

[英]regex in r to replace a string with no special characters

我正在用足球時間表練習我的正則表達式並且無法解決這個問題

我基本上試圖將任何家庭游戲改為字符串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中使用正則表達式我相信所有的主隊都可以選擇正則表達式:^([AZ])\\ w + ..本質上是以大寫字母開頭。 這在R中不起作用,因為\\ w和其他錯誤一樣。

這是我嘗試過的(並且失敗了):

str_replace_all(as.matrix(schedule_teams), "[[^([A-Z])\w+]]", "HOME")

是否有更簡單的方法將所有主隊換成HOME?

提前致謝

您的正則表達式語法不正確,您將它包含在級聯字符類中,並且您嘗試在類中使用捕獲組,這會導致模式在到達結束時失敗)

簡而言之,您的正則表達式當前定義了一組字符( 不是您想要的 )然后失敗。

[[^([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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM