Вы можете создать вектор имен файлов на основе «сайтов» с той же длиной, что и 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)
Используйте привязку \b
для соответствия границам слов:
\bdo
находит «делать» в «хорошей собаке», но не соответствует «много шума» ничего».
Другие ответы, предлагающие сопоставление границ слов, являются аккуратными, но будут означать, что индекс не используется эффективно. Если вам нужны быстрые поисковые запросы, вы можете захотеть добавить поле «слова» с каждым словом, то есть
{sentence: "This is a dog",
words: ["This", "is", "a", "dog"]}
. Поместив индекс в поле words
, вы можете пойти назад к использованию:
{words: new RegExp('^'+key,'gi')}
и key
of the do теперь будут соответствовать этому объекту и использовать индекс.
^
соответствует началу строки (или началу строки, если установлен многострочный флаг).
\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
Вы можете использовать выражение /\bprefix\w+/
. Это должно соответствовать любому слову, начинающемуся с "prefix"
. Здесь \b
представляет собой границу слова, а \w
- любой символ слова.
Если вы не хотите получать все слово, вы можете просто сделать /\bprefix/
. Если вы хотите поместить это в строку, вам также нужно избежать \
: '\\bprefix'
.