Союз в регулярном выражении в R - PullRequest
1 голос
/ 03 июля 2010

Я пытаюсь использовать регулярные выражения в R, чтобы найти одну или несколько фраз в векторе длинных предложений (который я назову x).

Так, например, это прекрасно работает для одногофраза:

grep("(phrase 1)",x)

Но это не работает для двух (или более) фраз:

grep("(phrase 1)+(phrase 2)+",x)

Как я и ожидал.Когда я читаю, последний должен дать мне все совпадения в x для 1 или более фраз 1s, и 1 или более фраз 2.Но это ничего не возвращает.

Ответы [ 4 ]

2 голосов
/ 03 июля 2010

Другой способ

which(grepl("(phrase 1)+",x) & grepl("(phrase 2)+",x))
1 голос
/ 03 июля 2010

Вы должны сказать ему пропустить любые промежуточные символы:

grep("(phrase 1)+.*(phrase 2)+",x)

Также обратите внимание, что это не изменит порядок, поэтому вам, возможно, придется добавить это явно. В целом, может быть проще искать каждую фразу отдельно (особенно, если имеется более двух фраз), а затем комбинировать с intersect и union, чтобы получить общие результаты.

0 голосов
/ 07 июля 2010

Есть способ сделать это с одним регулярным выражением, используя lookaheads, хотя большинство механизмов регулярного выражения будет выполнять его довольно медленно:

> txt <- c("The grey fox jumped", "The blue cat slept", "The fox is grey", "The cat is grey")
> grep("(?=.*fox)(?=.*grey)", txt, perl=TRUE)
[1] 1 3
0 голосов
/ 03 июля 2010

Полные примеры (например, с, вы знаете, данные ...) всегда хороши.

Главный ключ для регулярных выражений в R - помнить, что существует три (!!) разных движка.Мне нравятся регулярные выражения в Perl.

Далее, важно помнить, что есть метасимволы - поэтому, если вы хотите получить парены, вам нужно их избежать.

С этим,Вот пример:

> txt <- c("The grey fox jumped", "The blue cat slept", "The sky was falling")
> grep("blue", txt)                       # finds sentence two
[1] 2
> grep("(grey|blue)", txt, perl=TRUE)     # finds one and two
[1] 1 2
> grep("(red|blue)", txt, perl=TRUE)      # finds only two (as it should)
[1] 2
> 

Итак, с помощью регулярных выражений Perl вы перечисляете альтернативы в скобках, разделенных символом канала.

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