2011-05-19 2 views
4

J'essaie de trouver une solution élégante sur la façon de convertir quelque chose comme çaMAJUSCULES pour le cas normal

TOUT LE TEXTE CAPS. "POURQUOI QUI L'UTILISERA?" C'EST RIDICULE! AIDEZ-MOI.

... en majuscules. Je ne pouvais plus ou moins trouver tous les caractères de démarrage phrase avec:

(?<=^|(\. \"?)|(!))[A-Z] #this regex sure should be more complex 

mais (standard) Ruby ne permet ni assertions arrières, ni il est possible de demander à .capitalize, par exemple, le remplacement gsub. Je voudrais pouvoir le faire:

"mytext".gsub(/my(regex)/, '\1'.capitalize) 

mais la solution de travail actuelle serait de

"mytext".split(/\. /).each {|x| p x.capitalize } #but this solution sucks 
+0

Euh ... cette solution ne suce pas. – SLaks

+0

Etes-vous en train d'écrire un client Stack Overflow? –

+0

En fait, je fais mon propre ensemble de traitement de texte TextMate (pour traiter les descriptions de produits qui se présentent sous une grande variété de formes). Malheureusement, le bundle de texte Standard TM n'a pas cette fonctionnalité particulière. – Kinkou

Répondre

4

tout d'abord, notez que ce que vous essayez de faire ne sera qu'une approximation.

  1. Vous ne pouvez pas indiquer correctement où se trouvent les limites de la phrase. Vous pouvez l'approximer comme Début de la chaîne entière ou juste après une période, un point d'interrogation ou un point d'exclamation suivi d'espaces. Mais alors, vous allez incorrectement capitaliser "économie" dans "économie américaine".

  2. Vous ne pouvez pas dire correctement quels mots doivent être mis en majuscule. Par exemple, "John" sera "john".

Vous voudrez peut-être faire un peu de traitement du langage naturel pour vous donner un résultat proche à corriger dans de nombreux cas, mais ces méthodes ne sont probablistically correcte. Vous n'obtiendrez jamais un résultat parfait.

La compréhension de ces limites, vous pouvez faire:

mytext.gsub(/.*?(?:[.?!]\s+|\z)/, &:capitalize) 
+1

Sciure brillante! Je voudrais savoir sur la syntaxe '&: capitalize'. J'ai légèrement modifié l'expression rationnelle pour correspondre à des cas comme _ .. fin de la première phrase. "C'est le début d'une nouvelle phrase." Phrase three._: '. *? (?: [.?!] \ "? \ S + \"? | \ Z) 'et ajouté' .gsub (/ i (?: \ S | \') /, & : upcase) 'à la fin de la ligne. L'expression donne maintenant des résultats tout à fait acceptables. Merci pour l'aide! – Kinkou

Questions connexes