NodeJS: Фильтровать строку по префиксу на каждое слово [дубликат]

Вы можете создать вектор имен файлов на основе «сайтов» с той же длиной, что и tbl, а затем объединить два, используя cbind

### Get file names
filenames <- list.files(path, full.names = TRUE, pattern = fileptrn, recursive = TRUE)
sites <- str_extract(filenames, "[A-Z]{2}-[A-Za-z0-9]{3}")

### Get length of each csv
file_lengths <- unlist(lapply(lapply(filenames, read_csv), nrow))

### Repeat sites using lengths
file_names <- rep(sites,file_lengths))

### Create table
tbl <- lapply(filenames, read_csv) %>% 
  bind_rows()

### Combine file_names and tbl
tbl <- cbind(tbl, filename = file_names)
3
задан gdoron 29 January 2012 в 11:22
поделиться

4 ответа

Используйте привязку \b для соответствия границам слов:

\bdo

находит «делать» в «хорошей собаке», но не соответствует «много шума» ничего».

5
ответ дан wutz 28 August 2018 в 03:52
поделиться

Другие ответы, предлагающие сопоставление границ слов, являются аккуратными, но будут означать, что индекс не используется эффективно. Если вам нужны быстрые поисковые запросы, вы можете захотеть добавить поле «слова» с каждым словом, то есть

{sentence: "This is a dog",
  words: ["This", "is", "a", "dog"]}

. Поместив индекс в поле words, вы можете пойти назад к использованию:

{words: new RegExp('^'+key,'gi')}

и key of the do теперь будут соответствовать этому объекту и использовать индекс.

2
ответ дан Nic Cottrell 28 August 2018 в 03:52
поделиться

^ соответствует началу строки (или началу строки, если установлен многострочный флаг).

\b соответствует границе слова.

\bdo соответствует словам, начинающимся с «do».

Итак, для вашего примера:

{sentence: new RegExp('\\b'+key,'gi')}

(отмечая, что в строке JavaScript вам нужно избежать обратных косых черт.)

Если вам понадобится захватить матч (ы), чтобы узнать, какое слово (-ы) соответствует шаблону, вы захотите обернуть выражение в круглые скобки и добавить бит в соответствие с остальной частью слова:

new RegExp('(\\b' + key + '\\w*)','gi')

Где \w - любой символ слова, а * - ноль или больше. Если вы хотите, чтобы слова, имеющие хотя бы один символ больше, чем key, используйте + вместо *.

Дополнительные сведения см. В многочисленных справочниках регулярных выражений в Интернете, например https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

1
ответ дан nnnnnn 28 August 2018 в 03:52
поделиться

Вы можете использовать выражение /\bprefix\w+/. Это должно соответствовать любому слову, начинающемуся с "prefix". Здесь \b представляет собой границу слова, а \w - любой символ слова.

Если вы не хотите получать все слово, вы можете просто сделать /\bprefix/. Если вы хотите поместить это в строку, вам также нужно избежать \: '\\bprefix'.

4
ответ дан Tikhon Jelvis 28 August 2018 в 03:52
поделиться
Другие вопросы по тегам:

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