【问题标题】:R regex extract standalone charactersR正则表达式提取独立字符
【发布时间】:2020-06-23 00:33:59
【问题描述】:

我正在尝试从多列中提取独立的字母 R 或 O。通过独立,我的意思是 R 或 O (i) 由空格分隔或 (ii) 这是单元格中的唯一值。这是一个可重现的示例。假设我想从 X1X2 列中提取独立的 R 或 O。

df 

这是想要的结果。

data.frame(X1 = c("", "R", "R"),
           X2 = c("R", "", ""))

这是我迄今为止尝试过的。第一种方法是有问题的,因为从 AER 中提取了 R,从 EHO 中提取了 O(也没有从“Y R E”中提取 R)。

要求(字符串)
sapply(df[,1:2], function(x) ifelse(df$X3 %in% NA, str_extract(x, "\\s?[O|R]$"), X3))

所以我试过这个,它解决了上述问题,但现在它无法从df[3,1]中提取R。

sapply(df[,1:2], function(x) ifelse( df$X3 %in% NA, str_extract(x, "(?![A-Z]+?)\\s?[O|R] $?"), X3))

我应该如何修复模式来获得这个?

【问题讨论】:

  • 当问题陈述和示例(包括每个期望的结果)在作者努力解决问题之前已经完成时,问题往往更容易理解。在这里,我建议您将“这是理想的结果”...移到“这是我到目前为止所尝试的...”之前。因为你是在读者知道你想要达到的目标之前引导他们阅读你的代码。
  • @CarySwoveland:感谢您的建议。我相应地更新了 OP。

标签: r regex stringr


【解决方案1】:

您可以使用单词边界:

sapply(df, stringr::str_extract, '\\b[RO]\\b')

#     X1  X2  X3
#[1,] NA  "R" NA
#[2,] "R" NA  NA
#[3,] "R" NA  NA

但是,请注意str_extract 将仅提取"R""O" 中的一个,以先到者为准。

stringr::str_extract('EH R O', '\\b[RO]\\b')
#[1] "R"

如果你想同时提取它们,你可能需要使用str_extract_all

【讨论】:

  • 看来我不需要在括号内的R和O之间使用垂直线|...嗯..那么如果我想不匹配R该怎么办还是 O 但 RO? [“RO”]应该可以吗?
  • 在这种情况下不要使用[]。你可以使用\\bRO\\b
  • 知道了。一如既往的感谢!!
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 2015-03-18
  • 2021-11-28
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多