對于以下字串向量s,我希望洗掉每個元素中的前導零,這與此鏈接的答案相反:
s <- c('week 01st', 'weeks 02nd', 'year2022week01st', 'week 4th')
預期的結果如下:
s <- c('week 1st', 'weeks 2nd', 'year2022week1st', 'week 4th')
我測驗了以下代碼,由于正則運算式語法不完整,因此無法正常作業:
s <- 'week 01st'
sub('^0 (?=[1-9])', '', s, perl=TRUE)
sub('^0 ([1-9])', '\\1', s)
出去:
[1] "week 01st"
我怎么能用 R 做到這一點?
更新:對于@dvantwisk 貢獻的以下代碼,它適用于year2022week01st,但不適用于其他元素:
s <- c('week 01st', 'weeks 02nd', 'year2022week01st', 'week 4th')
gsub('(year[0-9]{4,})(week)(0{0,})([1-9]{1})([0-9a-zA-Z]{1,})', '\\1\\2\\4\\5', s)
出去:
[1] "week 01st" "weeks 02nd" "year2022week1st" "week 4th"
uj5u.com熱心網友回復:
gsub('(week )(0{0,})([1-9]{1})([0-9a-zA-Z]{1,})', '\\1\\3\\4', week_string)
gsub()將三個引數作為輸入:模式、替換和查詢字符向量。我們的策略是創建一個包含 s 的四個組的正則運算式()。
我們拳頭比賽'周'。
然后我們將零個或多個零與運算式匹配(0{0,})。第一個零表示我們嘗試匹配的字符,運算式{0,}表示我們嘗試匹配零次(因此是 0)或更多次(因此是逗號)。
我們的第三組匹配一次 1 到 9 之間的任何數字。
第四組是匹配 0 到 9 之間的任何數字或任何字母 1 次或多次
我們的替代品是'\\1\\3\\4'. 這表明我們只想在結果中保留第一組和第三組。因此輸出為:
[1] "week 1st" "week 2nd" "week 3rd" "week 4th"
uj5u.com熱心網友回復:
您可能會使用:
weeks?\h*\K0 (?=[1-9]\d*[a-zA-Z])
模式匹配:
weeks?匹配周與可選 s\h*\K匹配可選空格并忘記到目前為止匹配的內容0匹配 1 次零(?=[1-9]\d*[a-zA-Z])正向前瞻,在右側斷言一個 char 1-9、可選數字和一個 char a-zA-Z
查看Regex 演示和R 演示。
在替換中使用空字串。
例如
s <- c('week 01st', 'weeks 02nd', 'year2022week01st', 'week 4th')
gsub("weeks?\\h*\\K0 (?=[1-9]\\d*[a-zA-Z])", '', s, perl=T)
輸出
[1] "week 1st" "weeks 2nd" "year2022week1st" "week 4th"
或使用 2 個捕獲組:
(weeks?\h*)0 ([1-9]\d*[a-zA-Z])
例子:
s <- c('week 01st', 'weeks 02nd', 'year2022week01st', 'week 4th')
gsub("(weeks?\\h*)0 ([1-9]\\d*[a-zA-Z])", '\\1\\2', s,)
輸出
[1] "week 01st" "weeks 02nd" "year2022week1st" "week 4th"
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410143.html
標籤:
下一篇:在長字串中的符號之間提取特定數字
