Группа Regex получает в R с несколькими группами получения

В вашем коде v-for будет повторяться для каждого вхождения отеля в вашем массиве, создавая 3 раза <p>

Для создания <p> только один раз вы должны поместить свой код в Тег <template> вложен в тег <p>.

Пример:

<p>
  <template v-for="hotel in hotels">
    <span v-if="hotel.facilities.indexOf('restaurant') !== -1">{{ hotel.name }}         
87
задан Frank 4 April 2017 в 15:46
поделиться

3 ответа

Это может быть сделано с помощью пакета , отклеивают , беря пример из выбранного ответа:

# install.packages("unglue")
library(unglue)

s <- c("(sometext :: 0.1231313213)", "(moretext :: 0.111222)")
unglue_data(s, "({x} :: {y})")
#>          x            y
#> 1 sometext 0.1231313213
#> 2 moretext     0.111222

Или начинающий с кадра данных

df <- data.frame(col = s)
unglue_unnest(df, col, "({x} :: {y})",remove = FALSE)
#>                          col        x            y
#> 1 (sometext :: 0.1231313213) sometext 0.1231313213
#> 2     (moretext :: 0.111222) moretext     0.111222

можно получить сырые данные regex от отклеивать шаблона, дополнительно с именованным получением:

unglue_regex("({x} :: {y})")
#>             ({x} :: {y}) 
#> "^\\((.*?) :: (.*?)\\)$"

unglue_regex("({x} :: {y})",named_capture = TRUE)
#>                     ({x} :: {y}) 
#> "^\\((?<x>.*?) :: (?<y>.*?)\\)$"
[еще 118] информация: https://github.com/moodymudskipper/unglue/blob/master/README.md

0
ответ дан 24 November 2019 в 07:44
поделиться

gsub делает это, из вашего примера:

gsub("\\((.*?) :: (0\\.[0-9]+)\\)","\\1 \\2", "(sometext :: 0.1231313213)")
[1] "sometext 0.1231313213"

вам нужно дважды экранировать \ s в кавычках, тогда они будут работать для регулярного выражения.

Надеюсь, это поможет.

44
ответ дан 24 November 2019 в 07:44
поделиться

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

regex.string <- "(?<=\\().*?(?= :: )"
regex.number <- "(?<= :: )\\d\\.\\d+"

match.string <- gregexpr(regex.string, str, perl=T)[[1]]
match.number <- gregexpr(regex.number, str, perl=T)[[1]]

strings <- mapply(function (start, len) substr(str, start, start+len-1),
                  match.string,
                  attr(match.string, "match.length"))
numbers <- mapply(function (start, len) as.numeric(substr(str, start, start+len-1)),
                  match.number,
                  attr(match.number, "match.length"))
3
ответ дан 24 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: