2009-12-08 2 views
0

Je pose peut-être cette question incorrectement, mais ce que je voudrais faire est la suivante:Comment faire correspondre exactement le mot avec regex?

Étant donné une grande chaîne qui pourrait être beaucoup de 100 lignes de longues lignes correspondent et remplacer un mot exactement et assurez-vous qu'il ne remplace pas et correspondre à n'importe quelle partie d'une autre chaîne.

Par exemple:

 
Strings to Find = Mac Apple Microsoft Matt Damon I.B.M. Hursley 
Replacement Strings = MacO AppleO MicrosoftO MattDamonP I.B.M.O HursleyL 
Input String (with some of the escape characters included for clarity) = 
"A file to test if it finds different\r\n 
bits and bobs like Mac, Apple and Microsoft.\n 
I.B.M. in Hursley does sum cool stuff!Wow look it's "Matt Damon"\r\n 
Testing something whichwillerrorMac"\n 

SORTIE

 
"A file to test if it finds different 
bits and bobs like MacO, AppleO and MicrosoftO. 
I.B.M.O in HursleyL do sum cool stuff!Wow look it's "Matt DamonP" 
Testing something whichwillerrorMac" 

J'ai essayé d'utiliser Regex en utilisant des limites de mots, bien que cela prend 'whichwhillerrorMacO' sur la dernière ligne.

J'ai également essayé d'utiliser la classe StringTokenizer et divers délimiteurs pour essayer de remplacer des mots, mais certains des mots que j'essaie de remplacer contiennent ces délimiteurs.

Existe-t-il une regex qui résoudrait ce problème?

+0

Combien de "chaînes à trouver" et "chaînes de remplacement" attendez-vous? Je pense que ma réponse serait la même dans les deux cas, mais j'ai pensé que je vérifierais. :) – PSpeed

+0

Je n'ai toujours pas résolu ce problème mais je fais simplement un contrôle d'égalité pour chaque mot à la place, mais cela prend beaucoup de temps à la baisse. Je ne suis pas sûr qu'un tel problème puisse être résolu. – binarycreations

Répondre

2

Remplacer \b(Mac|Apple)\b avec \$1O\ ne touchera pas whichwillerrorMac - il correspondra whichwill-Mac si.

Questions connexes