2015-02-28 5 views
2

У меня есть группа строк, которые содержат слово «радиус», за которым следует одна или две цифры. Они также содержат много других букв, цифр и символов подчеркивания. Например, один - «inflow100_radius6_distance12». Я хочу регулярное выражение, которое просто вернет одну или две цифры после «радиуса». Если R признал \ K, то я бы просто использовал это:Получить цифры после определенной строки в R

radius\K[0-9]{1,2} 

и будет сделано. Но R не допускает \ K, так что я в конечном итоге с этим вместо (который выбирает радиус и следующие номера, а затем обрезает «радиус»):

result <- regmatches(input_string, gregexpr("radius[0-9]{1,2}", input_string)) 
result <- unlist(substr(result, 7, 8))) 

Я довольно новыми для регулярных выражений, так Я уверен, что есть лучший способ. Есть идеи?

ответ

5

\K признан. Вы можете решить проблему, включив параметр perl = TRUE.

result <- regmatches(x, gregexpr('radius\\K\\d+', x, perl=T)) 
4

1) матч вся строка замены его цифр после radius:

sub(".*radius(\\d+).*", "\\1", "inflow100_radius6_distance12") 
## [1] "6" 

Регулярное выражение можно изобразить следующим образом:

.*radius(\d+).* 

Regular expression visualization

Debuggex Demo

2) Это также работает, включает в себя более простое регулярное выражение и преобразует его в числовой, в то же время:

library(gsubfn) 
strapply("inflow100_radius6_distance12", "radius(\\d+)", as.numeric, simplify = TRUE) 
## [1] 6 

Вот визуализация регулярного выражения:

radius(\d+) 

Regular expression visualization

Debuggex Demo

Смежные вопросы