【问题标题】:How to match nothing [duplicate]如何匹配任何内容[重复]
【发布时间】:2020-06-16 19:43:18
【问题描述】:

对于某些人来说,这可能是一个简单的问题:您如何在 R 中使用正则表达式来实际匹配任何内容? 假设你有一个这样的字符串向量:

q <- c("a", "12", "0", "", "300")

再假设你想匹配空字符串"",该怎么做呢? 似乎可以合理地匹配"" 使用grep 来匹配元字符. 意思是“任何字符”,无论是作为这样的还是作为否定字符类的内容,以及参数invert = T 来匹配比赛的反面:

grep(".", q, value = T, invert = T)
[1] ""

grep("[^.]", q, value = T, invert = T)
[1] ""

在任何一种情况下,匹配都有效。但是,可以肯定的是,使用invert 感觉像是一个方便的技巧,但不像是一个严肃的正则表达式。在 R 中是否有另一种匹配任何内容的方法?

【问题讨论】:

  • 我不确定你想做什么,但.* 会匹配你所有的输入
  • metchars 是类中的文字,所以[^.] 表示不是点
  • 例如,nzchar...!nzchar(q) 可以替代正则表达式。

标签: r regex regex-negation


【解决方案1】:

一种选择是将^ 指定为字符串的开头,然后将$ 指定为字符串的结尾

grep("^$", q)

nchar

which(nchar(q) == 0)

【讨论】:

  • 我不确定 OP 想要做什么,但 ^$ 不会匹配此数组 q &lt;- c("a", "12", "0", "300") 中的任何值。但是.* 应该匹配所有字符串以及空字符串
  • @FedericoPiazza。我猜 OP 想在他的帖子中直接匹配空白,即"",而不是invert = TRUE。也许OP会澄清它。谢谢
  • 我对否决票感到困惑。也许选民误解了这个问题(尽管“假设你想进一步匹配空字符串”,该怎么做?“看起来很清楚)或者希望你说没有设置多行标志。谁知道?我通常不会对琐碎问题的答案投赞成票,但在这里我投了补偿性一票。
猜你喜欢
  • 2016-08-17
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
相关资源
最近更新 更多