簡體   English   中英

R 中的字符串模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM