2010-08-16 4 views
-2

Je veux récupérer toutes les chaînes entre _ ("") de mon fichier.récupérer le contenu entre _ ("") dans ruby ​​

Comment puis-je aller chercher ça?

+0

Pouvez-vous s'il vous plaît préciser votre question? Êtes-vous des chaînes manquait dans une paire de guillemets doubles, ou dans une paire de doubles citations entourées de parenthèses? –

+0

Que devrait-il se passer s'il y a imbriqué '_ (" ")' s, comme 'foo _ (" bar _ ("baz") ")'? – sepp2k

+0

@ sepp2k: en général, vous devriez répondre à une question regex, plutôt que de vous plaindre de l'imbrication (à moins qu'il ne soit vraiment évident que l'imbrication soit un problème). Vous pouvez toujours mentionner une mise en garde que cela ne fonctionne pas si la chaîne est imbriquée, mais il est impoli de refuser purement et simplement de répondre à la question. Dans ce cas, il est conventionnel d'utiliser '_()' pour tout 'gettext' sur une chaîne, donc je suppose que ce qu'il essaie de faire est de scanner un fichier pour trouver toutes les chaînes qui doivent être localisées - et elles ' Je ne vais probablement pas inclure l'imbrication parce que '_ (" baz ")' n'est pas un mot dans un langage humain que je connaisse. –

Répondre

0

Si l'on suppose qu'il n'y a pas de guillemets imbriqués dans la chaîne que vous cherchez, vous voulez charger le fichier dans une chaîne

str=File.read("/path/to/file") 

scan Puis la chaîne en utilisant une expression régulière. L'expression régulière suivante devrait faire l'affaire. Il recherche les caractères _(" (les parenthèses ouvrantes ici sont échappées, car les parenthèses ont une signification spéciale dans les expressions régulières). Les parenthèses suivantes démarrent un groupe de capture (pour que le texte de la chaîne soit stocké dans la variable spéciale $1), puis trouve une chaîne de caractères consécutifs jusqu'au premier guillemet, puis termine le groupe de capture (avec des parenthèses fermées non échappées)) recherche une ") pour terminer l'expression.

/_\("([^"]*)"\)/ 

pour l'utiliser

str.scan(/_\("([^"]*)"\)/) do 
    puts $1 
end 
Questions connexes