Динамический оператор Where в LINQ

Попробуйте:

sum(grepl("(?<![A-Za-z])the(?![A-Za-z])", x, perl = T))

Это дает сумму 2 на вашем примере.

Но давайте рассмотрим также несколько более сложный пример:

x <- c("the_dog", "the_cat", "dog", "theano", "menthe", " the")

Вывод:

[1] 3

Выше мы пытаемся сопоставить любое the, которое не ' не иметь другой буквы до или после (например, theano).

Вы также можете добавить в [] другие вещи, которые вы не хотели бы сопоставлять, например, например. если бы вы не считали the99 словом the, вы бы сделали [A-Za-z0-9] и т. д.

Вы также можете использовать вышеупомянутое с stringr, например (я включил исключение чисел, поэтому ниже the99 не будет считаться как слово):

library(stringr)

sum(str_detect(x, "(?<![A-Za-z0-9])the(?![A-Za-z0-9])"))
54
задан abatishchev 17 February 2015 в 18:46
поделиться

3 ответа

alt text
(источник: scottgu.com )

Вам нужно что-то вроде этого? Используйте библиотеку динамических запросов Linq (загрузка включает в себя примеры).

Дополнительные примеры см. В блоге ScottGu .

53
ответ дан 7 November 2019 в 07:58
поделиться

Вы также можете использовать PredicateBuilder из LinqKit, чтобы связать несколько типов лямбда-выражений с помощью Or или And.

http://www.albahari.com/nutshell/predicatebuilder.aspx

13
ответ дан 7 November 2019 в 07:58
поделиться

У меня был такой же вопрос ( Пользовательский фильтр для linq ), и @tvanfosson рассказал мне о Dynamic Linq ( http://code.msdn.microsoft. com / csharpsamples ).

2
ответ дан 7 November 2019 в 07:58
поделиться
Другие вопросы по тегам:

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