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.
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));
}
/^[^\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.
Juste
([0-9]+) .*
Si vous avez toujours l'espace après le premier numéro, cela fonctionnera
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.
le code ci-dessous ferait l'affaire.
Integer num = Integer.parseInt("100 2011-10-20 14:28:55");
[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
Essayez ^(?'num'[0-9]+).*$
qui le force à commencer au début, lisez un nombre, stockez-le sur 'num' et utilisez le reste sans relier.
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;
}
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()+" ");
}