这可能是一个非常简单的问题,但是我对正则表达式的经验不多。此page是正则表达式的一个很好的来源,但无法弄清楚如何将它们包含在我的以下代码中:
data %>% filter(grepl("^A01H1", icl))
问题
我想从此data
开始提取A01H1
帧的一列中的值,最多再增加2位数字,例如A01H100, A01H140, A01H110
。尽管尝试了几次,但仍找不到解决方案:
尝试
我看着这个question,从中我使用^A01H1[0-9].{2}
最多再选择两个数字。
我尝试添加任何字符^A01H1[0-9][0-9][x-y]
以在两位数后停止。
任何帮助将不胜感激:)
答案 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)
)时是必需的。