提取最多两位数字

时间:2019-09-10 11:37:18

标签: r regex

这可能是一个非常简单的问题,但是我对正则表达式的经验不多。此page是正则表达式的一个很好的来源,但无法弄清楚如何将它们包含在我的以下代码中:

data %>% filter(grepl("^A01H1", icl))

问题

我想从此data开始提取A01H1帧的一列中的值,最多再增加2位数字,例如A01H100, A01H140, A01H110。尽管尝试了几次,但仍找不到解决方案:

尝试

我看着这个question,从中我使用^A01H1[0-9].{2}最多再选择两个数字。

我尝试添加任何字符^A01H1[0-9][0-9][x-y]以在两位数后停止。

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

您可以使用"^A01H1\\d{1,2}$"。 您已经弄清楚了第一部分("^A01H1"),那么在第二部分("\\d{1,2}$")中我们要做什么?

  • \d包含所有数字,并且等同于[0-9],因为我们在R中工作,所以需要转义\,因此我们使用\\d
  • {1,2}表示我们希望\\d有1或2个匹配项
  • $指定了字符串的结尾,因此之后不应该再出现任何字符,这将阻止匹配两位以上的数字

答案 1 :(得分:1)

似乎您要匹配以A01H1开头,然后包含1或2位数字,然后不跟任何数字的字符串的一部分。

您可以使用

^A01H1\d{1,2}(?!\d)

请参见regex demo如果两位数之后都没有文本,请将(?!\d)替换为$

详细信息

  • ^-开始开始
  • A01H1-文字字符串
  • \d{1,2}-一位到两位数字
  • (?!\d)-右边不允许有数字
  • $-字符串结尾

在R中,您可以像使用它

grepl("^A01H1\\d{1,2}(?!\\d)", icl, perl=TRUE)

或者,使用字符串结尾锚,

grepl("^A01H1\\d{1,2}$", icl)

请注意,{perl=TRUE仅在使用特定于PCRE的语法(例如(?!\d))时是必需的。