[英]String Pattern in R
我有一個字符串列表如下:“/home/ricardo/MultiClass/data//F10/1036.txt”
> library(stringr)
> strsplit(cls[1], split= "/")
給我嗎:
#> [[1]] [1] "" "home" "ricardo" "MultiClass" "data"
#> "" "F10" "1036.txt"
我怎樣才能只保持第 7 位?
#> "F10"
如果要在//
之后提取一個或多個字符,直到字符串的第一個/
或結尾,請使用
> library(stringr)
> s <- "/home/ricardo/MultiClass/data//F10/1036.txt"
> str_extract(s, "(?<=//)[^/]+")
[1] "F10"
(?<=//)[^/]+
正則表達式模式將找到前面有 2 個斜杠的位置(參見(?<=//)
),然后匹配除/
之外的一個或多個字符(參見[^/]+
)。
帶有sub
基本 R 解決方案看起來像
> sub("^.*/([^/]*)/[^/]*$", "\\1", s)
[1] "F10"
詳情:
^
- 字符串的開始.*
- 盡可能多的任意 0+ 個字符/
- 斜線(字符串中的最后一個,因為前一個模式是貪婪的)([^/]*)
- 捕獲組 #1 匹配除/
以外的任何 0+ 個字符/
- 最后一個斜線[^/]*
- 除/
之外的任何 0+ 個字符$
- 字符串的結尾。可以通過這種方式在 R-base 中完成。 我已經定義了函數gret
從字符串中提取模式
gret <-function(pattern,text,ignore.case=TRUE){
regmatches(text,regexpr(pattern,text,perl=TRUE,ignore.case))
然后
gsub("data|/*","",gret("(?=data/).*(?<=/)","/home/ricardo/MultiClass
/data//F10/1036.txt"))
#>[1] "F10"
使用stringr
功能word
,
library(stringr)
word(sub('.*//', '', s), 1, sep = '/')
#[1] "F10"
#where
s <- '/home/ricardo/MultiClass/data//F10/1036.txt'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.