2015-10-19 5 views
2

Я пытаюсь извлечь строку, соответствующую шаблону в строке. Для того, чтобы иметь смысл:Соответствие шаблону для извлечения условий сопоставления строк

x <- "this.is.fairly//Whatit.is/path/IDbeginUntilhere7/seenit" 

Цель состоит в регулярном выражении является возвращение: IDbeginUntilhere. Я попытался это:

str <- regmatches(x, gregexpr("^I.*7$", x)) 

, который я понимаю, что это не работает, так как I находится в середине строки. Вопрос может быть слишком простым, но я был бы признателен за любую помощь, которую я могу получить.

+5

Опустить^и $. Они указывают, что шаблон начинается в начале и заканчивается в конце строки. –

+0

Спасибо. Ну, вопрос действительно прост! – remi

+0

лучше, если это не жадный 'str <- regmatches (x, gregexpr ("^I. *? 7 $ ", x))' или 'str <- regmatches (x, gregexpr ("^I [^ I] * 7 $ ", x))' –

ответ

2

Понятно, что основной проблемой является якорь: начало строки ^ и конец строки $.

Вторичная проблема заключается в том, что жадная точке также будет соответствовать по / разграниченным подразделам (т.е. будет соответствовать всему Id7/Not-to-match7 вместо Id7).

Вы должны использовать что-то вроде

str <- regmatches(x, gregexpr("I[^/]*7", x)) 

См regex demo

Если вы не нуждаетесь в 7, вам нужно использовать смотреть вперед, и Perl, как регулярное выражение:

str <- regmatches(x, gregexpr("I[^/]*(?=7)", x, perl=TRUE)) 

См. another demo

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