我確定這是一個愚蠢的問題,我有幾個字串,例如data_PB_Belf.csv
,我只需要提取PB_Belf
(等等)。如何在第一個 _ up 之后提取所有內容。(最好使用stringr
)?
data
[1] "data_PB_Belf.csv" "data_PB_NI.csv" ...
str_replace(data[1], "^[^_] _([^_] )_.*", "\\1") ## the closer I got, it returns "PB"
- 我試圖從這里調整代碼,但我做不到。我確定有一種方法可以使用
str_replace()
orstr_sub()
或str_extract()
,我只是無法獲得正確的正則運算式。提前致謝!
uj5u.com熱心網友回復:
我們可以從字串的開頭 ( )匹配一個或多個不是_
( ) 的字符,然后是一個,然后捕獲不是點 ( ) ( ) 后跟的字符(點是元字符,所以轉義) , 后跟任何字符并替換為捕獲組的反向參考 ( )[^_]
^
_
.
([^.] )
.
\\
\\1
sub("^[^_] _([^.] )\\..*", "\\1", data)
[1] "PB_Belf" "PB_NI"
或與str_replace
library(stringr)
str_replace(data, "^[^_] _([^.] )\\..*", "\\1")
[1] "PB_Belf" "PB_NI"
uj5u.com熱心網友回復:
還有其他更簡單的選項可用。例如,您可以使用,如您所提到的,str_extract
與環視一起使用:
library(stringr)
str_extract(x, "(?<=_).*?(?=\\.)")
[1] "PB_Belf" "PB_NI"
我們在這里使用:
(?<=_)
: 正向看后面斷言我們要提取的內容必須以_
and開頭(?=\\.)
: 正向向前斷言,我們要提取的內容必須跟一個點。
資料:
x <- c("data_PB_Belf.csv", "data_PB_NI.csv")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/519972.html
標籤:r正则表达式细绳弦乐
上一篇:正則運算式不允許破折號