【问题标题】:R: gsub words between space [closed]R:空格之间的gsub单词[关闭]
【发布时间】:2015-12-03 10:32:46
【问题描述】:

我的文字如下所示:

a <- "233,236,241 solitude ΔE=1.9"

我想要做的是在两个空格()之间提取第二个单词,给出这个输出

> solitude

我尝试了两种方法:

a1 <- strsplit(a,' ',fixed=TRUE)[[1]][2]
a2 <- sapply(strsplit(a, " ", fixed=TRUE), "[", 2)

但它总是显示:

ΔE=1.9

正确的做法是什么?

【问题讨论】:

  • strsplit(a,' ')[[1]][2] 适用于 a&lt;-"233,236,241 solitude ΔE=1.9"
  • 或者只是sub(".*\\s+(.*)\\s+.*", "\\1", a)
  • 我对你的每一种方法都感到“孤独”......

标签: regex r gsub


【解决方案1】:

试试这个:

gsub("\\s.+$","",gsub("^.+[[:digit:]]\\s","",a))

【讨论】:

  • 两个gsub 电话有什么意义?
  • 第一个将文本剪切到“solitude”之前的空格第二个将文本从“solitude”之后的空格剪切到末尾。
【解决方案2】:

这是一种使用捕获类(括号内的模式)和字符类(方括号内的模式)的方法。

sub("(^[^ ]*[ ])([^ ]*)([ ].*$)" , "\\2", a)
[1] "solitude"

注释第一个捕获类模式:

"(^[^ ]*[ ])([^ ]*)([ ].*$)" , "\\2", a)
         \finds first space
       \ an arbitrary number of times
    \\ inside a character class an '^' as the first character ...
       signals negation of character class. This one with only the space character in it.
  \----- '^' marks the beginning of a character value

第二次捕获类模式:

"(^[^ ]*[ ])([^ ]*)([ ].*$)" , "\\2", a)
                 \ an arbitrary number of times
              \\negation of character class with only the space character in it.

第三类捕获:

"(^[^ ]*[ ])([^ ]*)([ ].*$)" , "\\2", a)
                     \ the second space
                        \\anything after second space to end.

replacement 中的 "\\&lt;n&gt;" 条目指的是捕获类匹配 n 它们出现在 pattern 参数中的顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2021-08-22
    • 2023-03-09
    • 2020-08-26
    • 1970-01-01
    相关资源
    最近更新 更多