2009-07-30 11 views
4

Je suis une chaîne:Obtenir les numéros de chaîne

"1|2 3 4 oh 5 oh oh|e eewrewr|7|". 

Je veux obtenir les chiffres entre les premiers tubes (|), retour "2 3 4 5".

Quelqu'un peut-il m'aider avec l'expression régulière pour le faire?

+0

Ne pas utiliser regex quand une scission est suffisante. – Brian

Répondre

8

Est-ce que cela fonctionne?

"1|2 3 4 oh 5 oh oh|e eewrewr|7|".split('|')[1].scan(/\d/)

+2

... et pour obtenir des nombres, au lieu de chaînes, vous pouvez ajouter ceci: .map {| n | n.to_i} –

+0

... et aux nombres dans une chaîne comme dans votre exemple, vous ajoutez ceci à la place: '.join ('')' – Pesto

+0

@Nate: Que diriez-vous de '.map! {| n | n.to_i} '(Personnellement, j'aime muter plutôt que d'avoir un nouvel objet) – Swanand

0

si vous voulez juste utiliser ... regex

\|[\d\s\w]+\| 

puis

\d 

mais c'est probablement pas la meilleure solution

5

Arun's answer est parfait si vous ne voulez que des chiffres. dire

"1|2 3 4 oh 5 oh oh|e eewrewr|7|".split('|')[1].scan(/\d/) 
# Will return ["2", "3", "4", "5"] 
"1|2 3 4 oh 55 oh oh|e eewrewr|7|".split('|')[1].scan(/\d/) 
# Will return ["2", "3", "4", "5", "5"] 

Si vous souhaitez que les numéros à la place,

# Just adding a '+' in the regex: 
"1|2 3 4 oh 55 oh oh|e eewrewr|7|".split('|')[1].scan(/\d+/) 
# Will return ["2", "3", "4", "55"] 
Questions connexes