Использование grep для фильтрации строк с двумя или более шаблонами в строке в R - PullRequest
1 голос
/ 18 марта 2019

Мне нужно проиндексировать все строки, в которых есть строка, начинающаяся с "B-" или "B^" в одном из столбцов.Я перепробовал несколько комбинаций, но подозреваю, что они могут не работать из-за того, что знаки «-» и «^» также являются частью команды grep.

dataset[grep('^(B-|B^)[^B-|B^]*$', dataset$Col1),]

При использовании приведенного выше сценария строки начинаютсяс "B^" не извлекаются.Пожалуйста, предложите умный способ справиться с этим.

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Вы можете использовать команду escape \\ в grep:

dataset[grep('^(B\\-|B\\^)[^B\\-|B\\^]*$', dataset$Col1),]
0 голосов
/ 19 марта 2019

Для дальнейшего объяснения, ^ соответствует началу строки в качестве якоря, поэтому вы должны экранировать его в середине строки. [] является классом символов, поэтому [^B-|B^]* соответствует любому символу, который не является B, -, B или ^. Они здесь не нужны.

Упрощенное регулярное выражение: dataset[grep('^(B-|B\\^)', dataset$Col1),]

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