2 votes

Recherchez un "correspondance exacte des mots" dans un Datatable en utilisant une regex.

According to this link Recherche d'une correspondance de "mot entier" avec le motif LIKE de SQL Server

Je veux suivre la même chaîne de requête mais dans un datatable j'ai écrit la déclaration suivante

Supposez que le datatable contient les enregistrements suivants

datatable[0]["src"]="tst";
datatable[1]["src"]="tst,";
datatable[2]["src"]="tst:";
datatable[3]["src"]="disney";

int p=datatable.AsEnumerable().Select(a => Regex.IsMatch(a["src"].ToString(), "[^a-z]windows[^a-z]")).Count();

mais le résultat était p = 4 alors que ce mot 'windows' n'existe que 3 fois

Et en cas d'utilisation de 'where' au lieu de 'select' comme suit

int p=datatable.AsEnumerable().Where(a => Regex.IsMatch(a["src"].ToString(), "[^a-z]windows[^a-z]")).Count();

p est toujours de 0

Qu'est-ce qui ne va pas dans ma déclaration .. Des conseils ?!

2voto

GalacticCowboy Points 8185

Votre premier exemple (Select) exécute l'opération sur toutes les lignes dans le tableau de données. Le résultat serait une liste de valeurs booléennes indiquant si la valeur de la ligne correspond à l'expression.

Dans les deux cas, votre motif exige un caractère non alphabétique devant et après le mot "windows", ce qui fait qu'il ne correspond pas. Dans le premier cas, vous obtiendriez une liste contenant 4 valeurs "fausses", et dans le second cas, vous n'obtenez rien.

Je crois que l'expression régulière la plus simple pour obtenir ce que vous voulez est probablement quelque chose comme :

"\bmots\b"

(Utilisant l'expression régulière suggérée par Robert Harvey. Ce motif affirme qu'il y a une "pause de mot" - incluant rien - avant et après le mot.)

0voto

D Stanley Points 54768

Sélectionner et ne sont pas interchangeables - votre sélection renverra une valeur vrai ou faux pour chaque enregistrement, c'est pourquoi votre compte est de 4 (parce que vous avez 4 enregistrements et donc 4 valeurs de retour.

Votre clause où retourne 0 me dit que votre RegEx ne correspond pas aux valeurs 0-2. Je vérifierais que le RegEx fonctionne comme prévu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X