我對正則運算式非常陌生,所以如果這是一個明顯愚蠢的問題,請原諒我。
假設我有一個形式為(c "fair*", "beaut*")的字串,我想用開頭的省略號(^)替換結尾的星號(*):c("^fair", "^beaut")。我怎樣才能用stringr做到這一點呢?我讀過這個關于regexp的優秀介紹,但沒有搞清楚。我用stringr::str_replace_all()做了幾次嘗試,都沒有成功。問題似乎是stringr::str_replace_all()中的替換不能是一個regexp。是這樣嗎?如果是的話,有什么其他方法可以做到嗎?
library(stringr)
x < - c("fair*"/span>。 "beaut*")
str_replace_all(x, "*", "^^")
#> [1] "fair^^" "beaut^^"
str_replace_all(x, "*", "^^")
#> [1] "fair^^" "beaut^^"
str_replace_all(x, "*", "^*")
#> [1] "fair^*" "beaut^*"
str_replace_all(x, "*", "^(*)")
#> [1] "fair^(*)" "beaut^(*)"
創建于2021-09-15,由reprex包(v2.0.1)
uj5u.com熱心網友回復:
你可以使用
library(stringr)
x < - c("fair*"/span>。 "beaut*")
str_replace(x, "(. *)*$", "^1")
# => [1] "^fair" "^beaut"
sub("(. *)*$", "^1", x)
# => [1] "^fair" "^beaut"
參見regex演示和R在線演示。請注意,str_replace就足夠了,因為這里只可能出現一種替換。這就是為什么我也建議使用sub而不是gsub作為R的基本對應。
(.*)*$模式匹配并捕獲到第1組的任何0個或更多的字符(除換行符外),然后只匹配字串($)末尾的一個字面的*星號字符。
^1替換模式用^和第1組的值來替換匹配。
NOTE: 如果你的字串包含換行符,stringr解決方案將需要稍作修正。str_replace(x, "(?s)(.*)*$", "^1")/code>.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/306868.html
標籤:
