Использование более девяти обратных ссылок в регулярном выражении R - PullRequest
2 голосов
/ 30 ноября 2011

Приведенный ниже код не работает, поскольку строка замены для \ 10, \ 11 и т. Д. Не может быть правильно прочитана. Он читает \ 10 как \ 1 и печатает 0 вместо этого, вы можете помочь мне исправить это? В одном из потоков есть ответ, в котором говорится, что я должен использовать группы захвата или именования, но я не совсем понимаю, как их использовать.

headline <- gsub("regexp with 10 () brackets",
"\\1 ### \\2 ### \\3 ### \\4 ### \\5 ### \\6 ### \\7 ### \\8 ### \\9 ###
\\10### \\11### \\12### \\13### \\14### \\15### \\16",
page[headline.index])

Ответы [ 2 ]

3 голосов
/ 30 ноября 2011

Согласно ?regexp именованный захват доступен в regexpr() и gregexpr() начиная с R-2.14.0. К сожалению, он не еще доступен для sub() или, оказывается, gsub(). Таким образом, он все еще может быть полезен для вас, но, вероятно, потребует немного больше работы, чем вы могли бы надеяться.

(Несколько примеров именования групп в действии см. В разделе примеров ?regexpr.)

ДОБАВЛЕНО ПОЗЖЕ, ПОСЛЕ ОТВЕТА ГРЕГА СНЕВА

Грег Сноу намекал на возможность сделать это с пакетом gsubfn. Вот пример, который показывает, что gsubfn() действительно может обрабатывать более девяти обратных ссылок:

require(gsubfn)
string <- "1:2:3:4:5:6:7:8:9:10:11"
pat <- "^(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+"
gsubfn(pat, ~ paste(a,b,c,d,e,f,g,h,i,j,k,j,i,h,g,f,e,d,c,e,a), string)  
# [1] "1 2 3 4 5 6 7 8 9 10 11 10 9 8 7 6 5 4 3 5 1"
1 голос
/ 30 ноября 2011

Вы можете рассмотреть возможность использования gsubfn из пакета gsubfn вместо gsub, это дает больше возможностей для создания замены.

...