Apache Pig - les CORRESPONDANCES avec plusieurs critères de correspondance d'
Je suis en train de prendre un match logique de critères comme:
(("Foo" OR "Foo Bar" OR FooBar) AND ("test" OR "testA" OR "TestB")) OR TestZ
et appliquer ce qu'un match contre un fichier de porc à l'aide de
result = filter inputfields by text matches (some regex expression here));
Le problème est que je n'ai aucune idée de comment trun la logique de l'expression ci-dessus dans une expression regex pour les matches de la méthode.
J'ai bricolé avec les choses et le plus proche je suis arrivé à quelque chose comme ceci:
((?=.*?\bFoo\b | \bFoo Bar\b))(?=.*?\bTestZ\b)
Des idées? J'ai aussi besoin d'essayer de faire cette conversion par programmation si possible.
Quelques exemples:
un - Le brun rapide Foo sauté par-dessus le paresseux test (Cela devrait passer comme il contient des foo et test)
b - la chose se passait dans TestZ (Cela passe aussi, car il contient testZ)
c - le brun rapide Foo sauté par-dessus le chien paresseux (Ce doit échouer, car il contient de Foo mais pas de test,testA ou TestB)
Grâce
Si cette faute de frappe n'est pas intentionnel vous pouvez le corriger à l'aide de [modifier] option ci-dessous la question au lieu d'informer les autres à ce sujet 🙂
J'ai quelques idées sur la façon d'écrire votre regex, mais il forme dépendra de ce que vous avez et quel est le résultat que vous attendez. Pour l'instant, je ne suis pas sûr si
test
obligatoire après foo bar
partie. Si oui, doit-il être également inclus dans le match (vous êtes à l'aide de look-ahead (?=...) donc probablement pas). Aussi, vous dites qu'il devrait y avoir )
avant OR TestZ
donc, est-ce que TestZ
est assez pour un seul match?Salut, comme vous l'avez justement souligné, je peux le modifier...donc je l'ai ajouté le support maintenant. nous avons effectivement une liste de phrases dans le inputfields fichier (dans le champ de texte). Je suis à la recherche du texte qui correspond aux critères
Ce qui ne l'opérateur ET dans votre exemple? Un texte ne peut pas "Foo" et "tester" les deux en même temps ou est-il censé "Foo test"? Pouvez-vous poster un couple d'exemples de vos données d'entrée et de ceux qui vous veulent du match?
OriginalL'auteur user2495234 | 2013-09-01
Vous devez vous connecter pour publier un commentaire.
Puisque vous êtes à l'aide de Cochon vous n'avez pas réellement besoin d'un expression régulière, vous pouvez utiliser les opérateurs booléens fourni par pig combiné avec un couple de facile expressions régulières, par exemple:
OriginalL'auteur jkovacs
Vous pouvez utiliser cette expression pour
matches
méthode"Foo" OR "Foo Bar" OR "FooBar"
devrait être écrit commeFooBar|Foo Bar|Foo
pasFoo|Foo Bar|FooBar
pour empêcher la correspondance uniquementFoo
en chaîne de caractères contenantFooBar
ouFoo Bar
.*
à la fin de la regex pour laisser matchs match ensemble de la chaîne.Démo
de sortie:
OriginalL'auteur Pshemo