Regex pour correspondre à de multiples chaînes
J'ai besoin de créer une regex qui peuvent correspondre à plusieurs chaînes. Par exemple, je veux trouver toutes les occurrences de "bonne" ou "excellente". J'ai trouvé quelques exemples, mais ce que j'ai trouvé ne semble pas fonctionner:
\b(good|great)\w*\b
Quelqu'un peut me pointer dans la bonne direction?
Edit: je dois souligner que je ne veux pas seulement avec des mots entiers. Par exemple, vous souhaitez peut-être par "inondation" ou "arrière" (de la part de parties de mots).
Edit 2: Voici un exemple de texte: "C'est vraiment une grande histoire".
J'aimerais correspondre à "ceci" ou "vraiment", ou je pourrais avoir besoin pour correspondre à "tous" ou "arrière".
- Voulez-vous faire correspondre "oo", "o" ou en "t", trop?
- Qu'en est ooooooooooooooooooooooooooooooooooooooooooooooooooo?
- J'ai trouvé que l'utilisation de "bon|grand" que le modèle fonctionne, est-ce ok? Pourquoi certains exemples ont plus de balisage en eux?
- oui, vous pouvez aussi traduire, ou envoyer un e-mail avec elle.
- Je ne vois aucune similitude entre vos exemples. Êtes-vous essayer de faire correspondre aléatoire des sous-chaînes dans les mots au hasard? Les expressions régulières sont pour la reconnaissance de motifs-de sorte que vous aurez besoin de nous dire POURQUOI "il", "vraiment", "tous" et "arrière" sont les associations.
- J'essaie de trouver du texte dans un document qui correspond à une liste de mots. Je veux générer une expression régulière pattern à partir d'une liste de mots, puis l'utiliser pour voir si il y a un de ces mots dans ce document.
- D'accord avec les autres, vos informations sur des mots partiels actuellement n'a pas de sens.
- Pour les parties de mots, si j'essaie de trouver la "maison", je voudrais correspondre à des "maisons" ainsi. Je voudrais donc utiliser "maison" dans ma regex modèle et correspond à la partie de mot.
- Alors, que voulez-vous correspondre? "oo", "tous" ou "plusgoodwise"? Si le dernier, juste joindre les mots avec |.
- Cette question serait plus utile pour le site, si elle a été faite plus précise. E. g. pourquoi dites-vous "peut être" ou "peut-être"? Sous quelles conditions est-ce le cas? Aussi, autant que je comprends la question, l'on a accepté la réponse n'est pas correcte! "Bon" dans votre liste de mots ne produira pas un match "inondation".
Vous devez vous connecter pour publier un commentaire.
Si vous pouvez garantir qu'il n'y a pas réservé de la regex de caractères dans votre liste de mots (ou si vous y échapper), vous pouvez simplement utiliser ce code pour
a big word list
en@"(a|big|word|list)"
. Il n'y a rien de mal avec le|
opérateur que vous êtes en utilisant, aussi longue que ceux()
l'entourent. Il semble que les\w*
et la\b
modèles sont ce qui interfèrent avec vos matchs."ood"
dans"good"
.\b({0})\b
" (le post est facile à trouver par "c# regex match de multiples chaînes de" recherche et il n'est pas immédiatement clair si la question est portée à la parole des matchs/les correspondances partielles).après votre edit:
Je ne suis pas entièrement sûr que les regex seul offre une solution pour ce que vous essayez de faire. Vous pouvez, cependant, utiliser le code suivant pour créer une expression regex pour un mot donné. Bien que, l'résultant regex modèle a le potentiel de devenir très long et lent:
Code De Test:
Exemple De Sortie:
Je pense que vous demandez pour qch vous n'avez pas vraiment dire,
si vous voulez la recherche d'une Partie de la parole, vous avez littéralement à la recherche des lettres
par exemple, la Recherche {Jack, Jim} dans le "Jean et Shelly sont cool"
est à la recherche de toutes les lettres dans les noms {J,a,c,k,i,m}
*J*ohn *un*nd Shelly *a*re
et que vous n'avez pas besoin REG-EX 🙂
à mon avis,
Un Suffixe Arbre peut vous aider avec ce que
http://en.wikipedia.org/wiki/Suffix_tree#Functionality
profiter.
Seulement de vérifier la valeur de type boolean qui
Regex.IsMatch()
retourne.La ligne aura à la fois des regex, à droite.
&&
devrait être||
. La réponse elle-même avait beaucoup de problèmes avec la mise en forme, de la syntaxe et de l'orthographe, dont j'ai tenté de corriger. Veuillez passer en revue mes modifications.Je ne comprends pas le problème correctement:
Si vous voulez correspondre à "grand" ou "arrière", vous pouvez l'exprimer par un modèle du type:
Cela dit simplement que la "menace"-partie doit exister et le "g" est facultatif.
Cela pourrait correspondre à "l'arrière" et "grande", mais pas "manger", parce que le premier "r" dans "l'arrière" est nécessaire.
Si vous avez trop de mots "bien" et "bon" et vous voulez faire correspondre les deux avec une option "g", vous pouvez écrire ceci comme ceci:
Et si vous souhaitez inclure une limite de mot comme:
Vous devez être conscient que ce ne serait pas correspondre à quelque chose comme "breat" parce que vous avez la "menace", mais le "r" n'est pas à la limite de mot en raison de la "b".
Donc, si vous voulez faire correspondre l'ensemble des mots qui contiennent une sous-chaîne lien "arrière" ou "ood" alors, vous devriez essayer:
Ce lit:
1. Début avec une limite de mot de commencer correspondant à un nombre de caractères, mais ne pas être gready.
2. Correspondre à "l'arrière" ou "ood" enshures que seuls les mots sont appariés qui contiennent l'un d'eux.
3. Correspond à un nombre quelconque de caractères de mot qui suit "l'arrière" ou "inondation" jusqu'à la prochaine frontière de mot est atteint.
Ce sera un match:
"bonté", "bon", "inondation" (si un mot complet)
Il peut être lu comme: Donnez-moi tous les mots qui contiennent "inondation" ou "arrière".
Est que ce que vous recherchez?