str_extract 特定模式(示例)

5 regex r

我仍然对正则表达式语法有些困惑。你能帮我解决这些模式吗:

_A00_A1234B_
_A00_A12345B_
_A1_A12345_
Run Code Online (Sandbox Code Playgroud)

到目前为止我的方法:

vapply(strsplit(files, "[_.]"), function(files) files[nchar(files) == 7][1], character(1))
Run Code Online (Sandbox Code Playgroud)

或者

str_extract(str2, "[A-Z][0-9]{5}[A-Z]")
Run Code Online (Sandbox Code Playgroud)

预期的输出是

A1234B
A12345B
A12345
Run Code Online (Sandbox Code Playgroud)

谢谢!

akr*_*run 3

你可以试试

library(stringr)
str_extract(str2, "[A-Z][0-9]{4,5}[A-Z]?")
#[1] "A1234B"  "A12345B" "A12345" 
Run Code Online (Sandbox Code Playgroud)

此处,该模式查找一个大写字母[A-Z],后跟4或 5 位数字[0-9]{4,5},后跟一个大写字母[A-Z] ?

或者你可以使用stringi哪个会更快

library(stringi)
 stri_extract(str2, regex="[A-Z][0-9]{4,5}[A-Z]?")
 #[1] "A1234B"  "A12345B" "A12345" 
Run Code Online (Sandbox Code Playgroud)

或者一个base R选择是

 regmatches(str2,regexpr('[A-Z][0-9]{4,5}[A-Z]?', str2))
 #[1] "A1234B"  "A12345B" "A12345" 
Run Code Online (Sandbox Code Playgroud)

数据

str2 <- c('_A00_A1234B_', '_A00_A12345B_', '_A1_A12345_')
Run Code Online (Sandbox Code Playgroud)