2009-10-23 5 views
0

Je veux supprimer tout ce qui suit et y compris la décimale, et tout ce qui n'est pas numérique, sauf le trait d'union s'il s'agit du premier caractère. Jusqu'à présent, j'ai ceci: /[^0-9^-]|[^\.]+$/. Remarquez comment je bloque les tirets d'être supprimés avec ^-, parce que je veux en quelque sorte seulement supprimer les tirets qui ne sont pas le premier caractère (pas le signe). De l'aide? Merci.Regex convertir la chaîne en nombre valide, sans décimale, signe facultatif

Je veux juste pour enlever

  • Les non 0-9 caractères, à l'exception du premier caractère si elle est un tiret (signe négatif)
  • de Tout ce qui suit et y compris le point décimal

Ex .: 10js-_67.09090FD =>1067
-10a.h96 =>-10

EDIT: Peu importe, je m'approchais de la mauvaise façon, en essayant de faire correspondre les caractères qui n'appartiennent pas, et je me suis rendu compte que je ne devrais pas utiliser une regex pour cela. Merci pour vos réponses cependant, j'ai appris un peu à propos de regex et peut-être quelqu'un d'autre avec un problème similaire trouvera cela.

Répondre

2

Essayez ceci:

Regex numbers = new Regex(@"^(-?\d*)[^0-9]*(\d*)\.", 
    RegexOptions.ECMAScript | RegexOptions.Multiline); 
foreach (Match number in numbers.Matches("10js-_67.09090FD")) 
{ 
    Console.WriteLine(
     Int32.Parse(
      number.Groups[1].Value + 
      number.Groups[2].Value)); 
} 

Ou celui-ci:

Console.WriteLine(
    Int32.Parse(
     Regex.Replace(
      "10js-_67.09090FD", 
      @"^(-?\d*)[^0-9]*(\d*)\.([\s\S]*?)$", "$1$2", 
      RegexOptions.ECMAScript | RegexOptions.Multiline))); 

Ou celui-ci:

var re = /^(-?\d*)[^0-9]*(\d*)\.([\s\S]*?)$/ 
alert(parseInt("10js-_67.09090FD".replace(re, "$1$2"),10)); 
+0

J'utilise javascript. – mk12

1

Ce serait /^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/ (utilisation pour sed que vous ne dites pas moi quelle langue es-tu en train d'utiliser).

/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/ 
// '^'   ==&gtl From the Start 
// '(..)'  ==&gtl Group 1 
//  '-?'  ==&gtl An optiona '-' 
//  '[0-9]+' ==&gtl Some numbers 
// '[^0-9\.]*' ==&gtl Anything but numbers and dot 
// '(..)'  ==&gtl Group 2 (So this is the number after the dot) 
//  '[0-9]*' ==&gtl Some numbers 
// '.*$'  ==&gtl The rest 

Ensuite, imprimez uniquement les groupes 1 et 2 (/ \ 1 \ 2 /).

Tests:

$:~/Desktop$ echo "10js-_67.09090FD" | sed -r "s/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/" 
1067 
$:~/Desktop$ echo "-10a.h96" | sed -r "s/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/" 
-10

Hope this helps

+0

J'utilise javascript et utilisais str.replace() pour remplacer les caractères par "". – mk12

Questions connexes