2015-04-28 129 views
0

我想匹配的模式分离领域的开头:正则表达式匹配下划线

i%_%_%_%_c$_p$ 

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

例子中,我试图解决:

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 

我试过的其他东西全部地我发现,当搜寻,但没有它似乎帮助我理解这一点,虽然看起来应该是一个简单的搭配。不过,我对正则表达式没有经验。

任何想法?

谢谢!

+0

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

+0

@akrun我觉得在这个范围内使用连字符而不是逗号是非常愚蠢的。谢谢! – Shawn

回答

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 

如果是这样的话,你可以添加到.*$正则表达式结束。

希望这会有所帮助!

+1

对于想要在R中使用它的其他人来说,请确保双重转义(例如\\ d),因为您必须为R再次逃脱一次,然后再次为正则表达式。这就是为什么我首先避免使用它们的原因。尽管如此,这是一个很好的答案。 – Shawn

+0

好的一点,我只是在PCRE语法中提供了正则表达式,在某些情况下,它必须根据语言进行转义。 – CodingDuckling