6
votes

Comment scinder Ruby String par "\ r \ n"?

donné une chaîne comme: xxx

Je voudrais:

  • divisé par (\ r \ n) + , c'est-à-dire que je voudrais obtenir: ["good", "jour", "pile", "Stack", "Stack", " "]

    J'ai essayé s.split (/ (\ r \ n) + /) mais cela ne me donne pas le résultat attendu.

    pourquoi? Comment pourrais-je obtenir le résultat attendu?

  • Obtenez le numéro de \ r \ n dans le tableau, c'est-à-dire que le résultat attendu est le suivant: [1, 3, 2]

    Comment feriez-vous cela?

    J'utilise Ruby 1.9.2.


0 commentaires

5 Réponses :


8
votes

Voici comment j'irais ici:

s = "G o o d\r\nDay\r\n\r\n\r\nStack\r\n\r\nOverflow\r\n"

s.split(/[\r\n]+/) # => ["G o o d", "Day", "Stack", "Overflow"]


0 commentaires

11
votes

Presque, essayez ceci: xxx

ceci donne [1,3,2,1] qui est éventuellement la réponse "réelle". Mais sinon, s.chomp.scan ... donnerait [1,3,2] .


1 commentaires

Cela divise également sur le \ r , \ n , \ n \ n \ r \ n etc. Ce n'est pas exactement ce qui a été demandé, mais probablement une meilleure idée.



3
votes

Vous voulez scinder par / [\ r \ n] + / xxx


0 commentaires

2
votes

Votre Split (/ (\ r \ n) + /) ne fonctionne pas comme prévu parce que Les groupes de capture sont inclus dans le tableau renvoyé:

Si le motif contient des groupes, les correspondances respectives seront également renvoyées dans la matrice.

Une solution facile serait de scinder sur \ r \ n et de jeter les fichiers: xxx


0 commentaires

2
votes

Vous ne devriez pas obtenir \ r \ n dans vos chaînes, sauf si vous lisez dans un fichier texte Windows en mode binaire. Lisez-la en mode texte et Ruby corrige le \ r s pour vous automatiquement.


0 commentaires