ruby
  • regex
  • repeating
  • 2014-04-23 3 views -1 likes 
    -1

    je dois extraire les valeurs \ d avant les caractères entre guillemets, de sorte que le résultat pourRuby Regex motifs répétitifs

    teststring.scan(/regex/) 
    

    doivent être

    => [["4"], ["2"], ["1"]] 
    

    testString:

    testtring = '4 x "UM 4 ENGLISH" 2 x "UM FRENCH" 1 x "SOME OTHER STRING WHICH COULD CONTAIN 2 x"' 
    

    Ma première approche était quelque chose comme ça, dans différentes variantes:

    (\d) x ".+" ? 
    ((\d) x ".+" ?)+ 
    

    Répondre

    2

    Ne comptez pas qoutes dans les parties cités:

    teststring.scan(/(\d) x "[^"]+"/) 
    

    Alternativement, Ressemblance non gourmand:

    teststring.scan(/(\d) x ".+?"/) 
    

    En outre, envisager d'utiliser un quantificateur pour les chiffres à l'appui de plus d'un chiffre .

    teststring.scan(/(\d+) x "[^"]+"/) 
    
    +2

    Je pense que cela devrait être 'teststring.scan (/ (: (\ d) x "[^"] *") + /) 'Le modificateur de groupe regex' = 'est un look-ahead? - donc ça ne consomme pas les caractères correspondants, ça explique sans doute pourquoi tu t'es échappé avec le match gourmand '. +', en fait ton conseil d'utiliser '[" "' '' '' '' '' '' '' '' '' '' '' '' '' ' –

    +0

    @Neil Je l'accepterais comme la bonne réponse ... – user3428756

    +1

    Je pense que Trygve a identifié la bonne approche, mais a obtenu la syntaxe un peu faux. Cette réponse peut être corrigée. BTW, le '+ 'à la fin est également pas nécessaire, un seul groupe externe est jamais égalé à la fois –

    Questions connexes