我對正則運算式世界很陌生,想知道如何使用正則運算式從我匯入到 R 的一堆檔案名中提取字串。我的檔案遵循以下一般格式:
testing1_010000.csv
check3_012000.csv
testing_checking_045880.csv
test_check2_350000.csv
我想在 6 numbers.csv 部分之前提取所有內容,包括“_”以獲得類似的內容:
testing1_
check3_
testing_checking_
test_check2_
如果有幫助,我基本上想要洗掉的模式將始終是 6 個數字,緊跟其后的是 .csv。
任何幫助都會很棒,謝謝!
uj5u.com熱心網友回復:
有幾種方法可以解決這個問題。例如,匹配后跟“.csv”的六位數字串之前的任何內容。對于這個,您可能希望獲得第一個捕獲組。
/(.*)\d{6}.csv/
https://regex101.com/r/MPH6mE/1/
或者將所有內容匹配到最后一個下劃線字符。對于這個,你會想要整場比賽。
.*_
https://regex101.com/r/4GFPIA/1
uj5u.com熱心網友回復:
Files = c("testing1_010000.csv", "check3_012000.csv",
"testing_checking_045880.csv", "test_check2_350000.csv")
sub("(.*_)[[:digit:]]{6}.*", "\\1", Files)
[1] "testing1_" "check3_" "testing_checking_"
[4] "test_check2_"
uj5u.com熱心網友回復:
我們可以使用stringr::str_match(). 它也適用于不同的六位數。
library(tidyverse)
files <- c("testing1_010000.csv", "check3_012000.csv", "testing_checking_045880.csv", "test_check2_350000.csv")
str_match(files, '(.*_)\\d \\.csv$')[, 2]
#> [1] "testing1_" "check3_" "testing_checking_"
#> [4] "test_check2_"
正則運算式可以解釋為:“在包含下劃線之前捕獲所有內容,然后跟隨一個或多個數字 .csv 作為結尾”
由reprex 包(v2.0.1)于 2021 年 12 月 3 日創建
uj5u.com熱心網友回復:
使用nchar:
Files = c("testing1_010000.csv", "check3_012000.csv",
"testing_checking_045880.csv", "test_check2_350000.csv")
substr(Files, 1, nchar(Files)-10)
OR
library(stringr)
str_remove(Files, "\\d{6}.csv")
[1] "testing1_" "check3_" "testing_checking_"
[4] "test_check2_"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372788.html
