正则表达式匹配由下划线分隔的字段

时间:2015-04-28 13:17:48

标签: regex r

我试图匹配以:

开头的模式
i%_%_%_%_c$_p$

其中

% is a number with 1 to 3 digits
$ is a 2-digit number
Other characters are literal

示例I'试图解决:

ex <- 'i192_168_10_1_c01_p89_some_other_stuff'
grepl('some_pattern', ex)

我已经走到了这一步:

grepl('^i[0-9]{1-3}', ex)
TRUE

但是当我尝试在下一组数字之前加入下划线时,我得到:

grepl('^i[0-9]{1-3}_', ex)
FALSE

我已经尝试过我在搜索时发现的各种其他方式,但似乎没有任何一种方法可以帮助我理解这一点,尽管看起来它应该是一个简单的匹配。然而,我对正则表达式缺乏经验。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个:

^i(?:\d{1,3}_){4}c\d{2}_p\d{2}

在此处查看正则表达式的详细信息(使用您提供的示例):https://regex101.com/r/iF1jN9/1

ex <- 'i192_168_10_1_c01_p89_some_other_stuff'
grepl('^i(?:\\d{1,3}_){4}c\\d{2}_p\\d{2}', ex)
# [1] TRUE

我不知道你是否想要匹配下一步:

_some_other_stuff

如果是这种情况,您可以在最后添加.*$到正则表达式。

希望这有帮助!