web-dev-qa-db-fra.com

Regex obtiendra le premier numéro de la chaîne: 100 2011-10-20 14:28:55

Je suis nouveau dans les expressions régulières et je me demandais comment je pouvais obtenir le premier nombre d'une chaîne telle que 100 2011-10-20 14:28:55. Dans ce cas, je voudrais qu'il renvoie 100, mais le nombre pourrait également être plus court ou plus long. 

Je pensais à quelque chose comme [0-9] +, mais il faut chaque numéro séparément (100,2001,10, ...)

Je vous remercie.

14
ratsimihah

Essayez ceci pour faire correspondre le premier numéro de la chaîne (qui peut ne pas être au début de la chaîne):

    String s = "2011-10-20 525 14:28:55 10";
    Pattern p = Pattern.compile("(^|\\s)([0-9]+)($|\\s)");
    Matcher m = p.matcher(s);
    if (m.find()) {
        System.out.println(m.group(2));
    }
4
Victor Sorokin
/^[^\d]*(\d+)/

Cela commence au début, ignore les non-chiffres et correspond à la première séquence de chiffres trouvée

EDIT: Cette expression rationnelle correspondra au premier groupe de nombres, mais, comme indiqué dans d'autres réponses, parseInt est une meilleure solution si vous savez que le nombre se trouve au début de la chaîne.

19
hair raisin

Juste 

([0-9]+) .* 

Si vous avez toujours l'espace après le premier numéro, cela fonctionnera

6
Pierre Lab

En supposant qu'il y ait toujours un espace entre les deux premiers chiffres, puis

preg_match('/^(\d+)/', $number_string, $matches);
$number = $matches[1]; // 100

Mais pour quelque chose comme ça, vous feriez mieux d'utiliser de simples opérations sur les chaînes:

$space_pos = strpos($number_string, ' ');
$number = substr($number_string, 0, $space_pos);

Les regex sont coûteux en calcul et devraient être évités si possible.

4
Marc B

le code ci-dessous ferait l'affaire.

Integer num = Integer.parseInt("100 2011-10-20 14:28:55");
3
Vivek Viswanathan

[0-9] signifie que les nombres 0-9 peuvent être utilisés le + signifie 1 fois ou plus. si vous utilisez [0-9] {3} vous obtiendrez 3 nombres

1
orangegoat

Essayez ^(?'num'[0-9]+).*$ qui le force à commencer au début, lisez un nombre, stockez-le sur 'num' et utilisez le reste sans relier.

1
Daniel Moore

Cette extension de chaîne fonctionne parfaitement, même si la chaîne ne commence pas par un nombre. Renvoie 1234 dans chaque cas - "1234asdfwewf", "% sdfsr1234" "## # 1234"

    public static string GetFirstNumber(this string source)
    {
        if (string.IsNullOrEmpty(source) == false)
        {
            // take non digits from string start
            string notNumber = new string(source.TakeWhile(c => Char.IsDigit(c) == false).ToArray());

            if (string.IsNullOrEmpty(notNumber) == false)
            {
                //replace non digit chars from string start
                source = source.Replace(notNumber, string.Empty);
            }

            //take digits from string start
            source = new string(source.TakeWhile(char.IsDigit).ToArray());
        }
        return source;
    }
1
Martin Topolsky
public static void main(String []args){
        Scanner s=new Scanner(System.in);
        String str=s.nextLine();
        Pattern p=Pattern.compile("[0-9]+");
        Matcher m=p.matcher(str);
        while(m.find()){
            System.out.println(m.group()+" ");

        }
0
DHIVYA N