【问题标题】:Regex Matching Negative values正则表达式匹配负值
【发布时间】:2016-12-15 10:48:38
【问题描述】:

我正在尝试使用多个正则表达式创建一些简单且易于编写的内容集群。

想象一个字符串列表:c("a","b","ac") 我需要定义的组是“All:a's”和“All:b's”。所以值“a”和“ac”是“A”,“b”是“B”。

myDF$contentGroup <- sub(".*a.*", "A", myDF$stringList)

但是,如果未发生匹配,这将导致我的数据框“contentGroup”中包含“stringList”的值。因此,如果我使用“B”执行同一行代码,它将覆盖“A”。

myDF$contentGroup <- sub(".*b.*", "B", myDF$stringList)

我只是想不出如何在一行代码中进行简单的聚类。让它尽可能简单。

【问题讨论】:

  • grepl() 将完成这项工作。 x &lt;- c("a","b","ac"); x[grepl("a|A",x)]这是你想要的吗?
  • x[grep('a', x, fixed = TRUE)] &lt;- 'A'; x[grep('b', x, fixed = TRUE)] &lt;- 'B'
  • ^ 不要忘记在这些语句中添加 fixed = TRUE 以提高 ~X10 的性能
  • @joel.wilson 因为解析正则表达式比查找精确匹配要复杂得多。经验法则是,如果subgrep 在其pattern 参数中没有任何表达式,而是一个普通字符串,请始终使用fixed = TRUE
  • 有人需要将答案从 cmets 移动到答案

标签: r regex


【解决方案1】:

可以使用grep来匹配'a'和'b',替换如下,

x[grep('a', x, fixed = TRUE)] <- 'A'
x[grep('b', x, fixed = TRUE)] <- 'B'

x
#[1] "A" "B" "A"

【讨论】:

    猜你喜欢
    • 2012-03-02
    • 1970-01-01
    • 2012-01-06
    • 2016-05-11
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多