9
votes

Ruby regex vs python regex

Y a-t-il des différences réelles entre Ruby Regex et Python Regex?

Je n'ai pas été incapable de trouver des différences dans les deux, mais peut avoir manqué quelque chose.


7 commentaires

Hmm? Qu'essayez-vous de "trouver"? Regex elle-même est une langue, la bibliothèque peut donc avoir un bit drapeaux différents, mais dans l'ensemble, la syntaxe est la même entre tout ce qui le supporte.


Ruby1.8 ou Ruby1.9? Il y a une énorme différence là-bas.


Voir - régulier-expressions.info/refflavors.html


Plutôt, Ruby1.9 et PHP5 devraient être identiques car ils adoptent le même moteur Oniguruma.


Je suis à peu près sûr que l'un ni l'autre n'a pas de bon soutien de débogage de regex.


Un cas particulier de cette question: Stackoverflow.com/questions/ 4644847 / ...


Ruby a regex cuit au four dans la langue, tout comme Perl, tandis que Python ne prend pas cette route (nécessite une bibliothèque). Pendant que j'aime les deux manières, les anciens victoires d'un point de vue de convivialité. Ensemble de différences syntaxiques montrées ici . Une différence indiquée dans cette question


5 Réponses :


1
votes

Les bibliothèques d'expression régulières pour Ruby et Python sont développées par deux équipes complètement indépendantes. Même s'ils sont identiques maintenant (et je ne serais pas certain qu'ils sont), rien ne garantit qu'ils ne divergeront pas de quelque temps à l'avenir.

La position la plus sûre consiste à supposer qu'ils sont différents maintenant et supposent qu'ils continueront d'être différents à l'avenir.


0 commentaires

5
votes

J'aime le motif / la syntaxe de Ruby, inspiré de Perl, pour des expressions régulières. Python's Re.comple ("modèle") n'est pas vraiment élégant pour moi. Le sucre syntatique de Ruby et le fait que les expressions régulières sont un module de re distinct dans Python, me fait pencher vers Ruby lorsqu'il s'agit d'expressions régulières.

En dehors de cela, je ne vois pas une grande partie d'une perspective normale de programmation d'expression régulière. Les deux langues ont assez complet et surtout similaire de soutien. Il pourrait y avoir des différences de performance (Python a traditionnellement une meilleure performance) et Python dispose également d'un support d'expressions régulières d'unicode plus important.


2 commentaires

Combien de Les propriétés de l'Unicode standard Le support Python? En outre, comment est la prise en charge de Python pour Proche graphémérie venir, comme via \ \ X ou peut-être via \ p {grapheme_base} \ p {grapheme_extend} * ? Est-ce que cela fait plein 1: de nombreux cas d'unicode pliant pour des correspondances insensibles de cas? Pouvez-vous utiliser de manière fiable n'importe quel point de code UNICODE, ou êtes-vous toujours bloqué par cette restriction BMP (que Unicode interdit, ahem )? BTW, je viens de vous côtoyer, ne le prenez pas trop au sérieux.


Je suis tout à fait d'accord avec vous qui avoir des regrets étroitement couplés à la langue principale au lieu de cloué sur le côté avec une bibliothèque fait une très grande différence dans l'usabondy.



8
votes

La dernière fois que j'ai vérifié, ils différaient sensiblement dans leur support Unicode. Ruby in 1.9 au moins a un soutien unicode très limité. Je crois qu'une ou deux propriétés Unicode peuvent être soutenues maintenant. Probablement les catégories générales et peut-être que les scripts étaient les deux que je pense.

Python a de moins en plus de support unicode en même temps. Python semble permettre de répondre aux exigences de rl1.2a "Propriétés de la compatibilité" De UTS # 18 sur expressions régulières Unicode .

Cela dit, il y a une bibliothèque python vraiment assez belle par Matthew Barnett (MRAB) qui ajoute enfin quelques propriétés Unicode aux regex des python. Il soutient les deux les plus importants: les catégories générales et les propriétés du script. Il a également d'autres caractéristiques intrigantes. Il mérite une bonne publicité.

Je ne pense pas non plus d'un support de rubis ou de python Unicode tout cela terriblement bien, bien que de plus en plus se fait chaque jour. Toutefois, en particulier, l'on ne respecte pas même les barebones Niveau 1 requis pour les expressions régulières Unicode citées ci-dessus. Par exemple, RL1.2 nécessite que d'au moins 11 propriétés soient prises en charge: Général_category, script, alphabétique, majuscule, minuscule, blanc_space, nonchaacter_code_point, par défaut_ignorable_code_point, n'importe quel, ASCII, et attribué .

Je pense que Python ne vous permet que de vous rendre à certains de ceux-ci et seulement de manière rond-point. Bien sûr, il y a beaucoup, beaucoup d'autres propriétés au-delà de ces 11.

Lorsque vous recherchez un soutien à unicode, il y a plus que des UTS n ° 10 sur des expressions régulières bien sûr, bien que ce soit celui qui compte le plus sur cette question et que ni rubis ni puython ne soient conformes au niveau 1. Les autres aspects très importants de Unicode comprennent Uax # 15, UAX N ° 14, UTS # 18, UAX N ° 11, Uax N ° 29, et bien sûr, le crucial UAX # 44. Python a des bibliothèques pendant au moins deux de ceux-ci, je sais. Je ne sais pas qu'ils sont standard.

Mais quand il s'agit d'un support d'expression régulier, il sont alternatives plus riches que de ces deux, vous savez. :)


5 commentaires

Je pense que Ruby Regex Support est devenu beaucoup plus puissant depuis votre dernière vérification: Github .com / ruby ​​/ ruby ​​/ blob / coffre / doc / re.rdoc


@steenslag Non, Ruby Regexes toujours sucer à Unicode. Les abréviations de Charclass sont toujours pitoyablement à l'écart avec RL1.2a, bloquées dans les sables ASCII d'antan. Même avec les accessoires POSIX. Et des choses comme \ p {inférieur} sont en conflit radical avec la norme UNICODE, qui dit qu'il doit être tous minuscules, pas seulement des lettres. Au-delà de cela, seules deux propriétés sont prises en charge: General_Category et Propriétés du script. Il n'y a pas de support pour les grappins graphèmes via \ x ou équiv. Il n'y a pas de \ n {nom} prise en charge. Il manque le reste de la matière pour le niveau 1, le niveau le plus bas acceptable de support Unicode.


@steenslag: Considérez ce modèle totalement raisonnable et très couramment nécessaire, pour assortir un groupe graphème - un caractère perçu par l'utilisateur - qui a «A» et un circonflexe, mais où vous ne connaissez pas le formulaire de normalisation en premier, où vous voulez. FullWidth "a" et tel pour correspondre, et là où d'autres marques peuvent tomber entre eux: nfkd ($ s) = ~ / (? = a \ p {grapheme_extend} * \ n {alliant circonflex accent}) \ X / ix . Comment suis-je cela dans Ruby? Ni Ruby ni Python ne peuvent même se rapprocher de répondre aux exigences minimales de UTS # 18 sur Unicode Regexes . voir maintenant?


Je ne suis pas un bon partenaire de discussion dans ce cas - j'ai dû la quinkipédie la plupart de vos mots clés. Mais que conseilleriez-vous l'op, le rubis ou le python?


@steenstag: Ruby ou Python pour Qu'est-ce que ? Expressions régulières? Les deux nécessitent de quoi consistent des compromis inacceptables. Je dois être capable de travailler avec Unicode.



3
votes

Si la question concerne uniquement les regex: ni. Utiliser perl.

Vous devez choisir entre ces langues basées sur les autres problèmes non dégophaux que vous essayez de résoudre et que le soutien communautaire dans cette langue se trouve à proximité de votre domaine d'activité.

Si vous ne choisissez vraiment qu'une langue basée sur la prise en charge des regex - choisissez Perl ...


0 commentaires

1
votes

La méthode REGEXP # de Ruby's est équivalente à RE.SEARCH (CODE> RE.SECH () de Python () , pas re.match () . re.search () et REGEXP # correspondre Recherchez le premier match n'importe où dans une chaîne. re.match () recherche un match uniquement au début d'une chaîne.

Pour effectuer l'équivalent de re.match () , une expression régulière de rubis devra commencer par un ^ , indiquant la correspondance du début de la chaîne.

Pour effectuer l'équivalent de REGEXP # Match , une expression régulière Python devra commencer par . * , indiquant la correspondance de zéro ou plus de caractères.


0 commentaires