[英]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.