2010-03-12 6 views
4

Comment puis-je extraire le montant en dollars de la chaîne suivanteRegEx - Comment extraire le prix?

« texte sera placé ici et de plus en plus, puis il y aura un prix de 34,03 $, mais cela ne signifie pas la chaîne prendra fin »

Je veux extraire $ 34.03 ... je veux aussi extraire s'il n'y a pas de centimes

"du texte ira ici et de plus en plus et puis il y aura un prix de 34 $ mais cela ne signifie pas que la chaîne va se terminer"

Ici, je veux extraire 34 $

Répondre

17

Je ne suis pas un regex-guru, mais j'ai été en mesure de faire ce qui suit avec RegExr.

/(\$[0-9]+(\.[0-9]{2})?)/ 

Matchs $35.03 et $35. Pour accepter des formats tels que $35,000.52 vous devez inclure ,

/(\$[0-9,]+(\.[0-9]{2})?)/ 

Cela pourrait probablement être améliorée, mais de mes essais préliminaires, il fonctionne très bien.

+0

il y a parfois l'espace (s) entre '' et '$ \ d'. Donc '(\ $ \ s? [0-9,] + (\. [0-9] {2})?)' Fonctionne pour moi. – 3zzy

2
'/\$\d+(?:\.\d+)?/' 

if(preg_match('/\$\d+(?:\.\d+)?/',$text,$matches)){ 
    echo $matches[0]; //which would be $34 or $34.03 
} 
1

Puisque vous ne mentionnez pas un moteur de regex spécifique, vous pourriez avoir à ajuster ce un peu:

/(\$\d+(\.\d+)?)/ 
1

Qu'en est-ce regexp: \$[0-9.,]+ ou \$([0-9.,]+) pour dépouiller les $?

C'est simple mais ça fait à peu près ce que vous voulez, il attrape même des choses comme ceci: $1,450.8934 ou $14.343.

Bien sûr, l'inconvénient serait qu'il attraperait aussi $34.54.23.

Ou si vous voulez attraper seulement deux décimales: \$[0-9,]+\.[0-9]{2} il attraperait la partie $5.23 de $5.234565. Vous pouvez l'utiliser avec preg_match ou preg_match_all.

1

Je travaille actuellement sur une petite fonction à l'aide regex pour obtenir le montant de prix à l'intérieur d'une chaîne:

private static String getPrice(String input) 
{ 
    String output = ""; 

    Pattern pattern = Pattern.compile("\\d{1,3}[,\\.]?(\\d{1,2})?"); 
    Matcher matcher = pattern.matcher(input); 
    if (matcher.find()) 
    { 
     output = matcher.group(0); 
    } 

    return output; 
} 

cela semble fonctionner avec un petit prix (0,00 à 999,99) et diverses devises:

12,34 $ -> 12,34

12,34 $ -> 12,34

12,00 $ -> 12.00

12 $ -> 12

12 € -> 12

12,11 € -> 12,11

12,999 € -> 12.99

12,9 € -> 12,9

£ 999.99 € -> 999,99

...

Questions connexes