Как выбрать строки, не содержащие слова, используя регулярное выражение? - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь удалить данные, которые не содержат слово data.

Я могу сделать следующее

rm(list = ls()[!grepl(pattern = "data", ls())])

Но я знаю, что в ls есть параметр pattern, которыйЯ могу сделать код лучше, я уже пробовал

rm(list = ls(pattern = "^[^data]"))

Но это не работает, так как удалить данные, которые не содержат слово, используя регулярное выражение.

Обновление :

Обратите внимание, что этот шаблон может не принимать стиль Perl .

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Внутри [ с ^ он специально проверяет символы, а не слово в целом. Поскольку ls не принимает регулярное выражение в стиле perl, может быть лучше использовать опции invert и value в grep

rm(list =grep(pattern = "data", ls(), invert = TRUE, value = TRUE))
0 голосов
/ 03 октября 2019

Просто используйте отрицательный взгляд:

(?!.*data)

Значение "утверждать, что не следует: ноль или более любых символов, за которыми следует data".

Я бы также предложилвключив однострочный режим на (?s) - точка будет совпадать с символом новой строки (?s)(?!.*data)

Если шаблон соответствует, вы можете удалить строку, так как она не содержит data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...