it-swarm-id.com

Regex untuk mendapatkan angka pertama dalam string: 100 2011-10-20 14:28:55

Saya baru mengenal ekspresi reguler, dan bertanya-tanya bagaimana saya bisa mendapatkan hanya angka pertama dalam string seperti 100 2011-10-20 14:28:55. Dalam hal ini, saya ingin mengembalikan 100, tetapi jumlahnya juga bisa lebih pendek atau lebih lama.

Saya sedang memikirkan sesuatu seperti [0-9] +, tetapi dibutuhkan setiap angka secara terpisah (100.2001,10, ...)

Terima kasih.

14
ratsimihah

Coba ini untuk mencocokkan angka pertama dalam string (yang mungkin bukan pada awal string):

    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+)/

Ini akan mulai dari awal, melewati non-digit, dan cocok dengan urutan pertama dari angka yang ditemukannya

EDIT: Regex ini akan cocok dengan kelompok angka pertama, tetapi, seperti yang ditunjukkan dalam jawaban lain, parseInt adalah solusi yang lebih baik jika Anda tahu nomornya ada di awal string.

19
hair raisin

Hanya

([0-9]+) .* 

Jika Anda selalu memiliki spasi setelah nomor pertama, ini akan berhasil

6
Pierre Lab

Dengan asumsi selalu ada ruang antara dua angka pertama, lalu

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

Tetapi untuk hal seperti ini, Anda sebaiknya menggunakan operasi string sederhana:

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

Regex mahal secara komputasi, dan harus dihindari jika memungkinkan.

4
Marc B

kode di bawah ini akan melakukan trik.

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

[0-9] berarti angka 0-9 dapat digunakan + berarti 1 kali atau lebih. jika Anda menggunakan [0-9] {3} akan memberi Anda 3 angka

1
orangegoat

Coba ^(?'num'[0-9]+).*$ yang memaksanya untuk memulai di awal, membaca nomor, menyimpannya ke 'num' dan mengkonsumsi sisanya tanpa mengikat.

1
Daniel Moore

Ekstensi string ini berfungsi dengan baik, meskipun string tidak dimulai dengan angka. kembalikan 1234 dalam setiap kasus - "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