2015-04-28 171 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