Bagaimana cara menulis regexp yang cocok dengan awal baris, sekumpulan angka, dan setidaknya satu spasi?

Saya menggunakan Rails 5. Saya ingin menghapus angka dari awal string saya, tetapi hanya jika diikuti oleh setidaknya satu spasi. Saya datang dengan regex

/^\d+[:space:]/

kecuali itu bekerja terlalu baik. Di bawahnya cocok dengan ekspresi yang tidak seharusnya

2.4.0 :032 > line = "1sb    212"
 => "1sb    212"
2.4.0 :033 > line =~ /^\d+[:space:]/
 => 0

Tidak boleh sesuai dengan ungkapan karena kata pertama “1sb” ada angkanya tetapi angkanya jika tidak diikuti spasi. Bagaimana cara menyesuaikan ekspresi saya sehingga hanya cocok dengan satu atau lebih angka yang diikuti oleh setidaknya satu spasi?


person Dave    schedule 07.08.2017    source sumber


Jawaban (2)


Anda perlu menempatkan kelas karakter POSIX ke dalam ekspresi braket:

/^\d+[[:space:]]/
     ^         ^

Lihat Demo Rubular

Jika tidak, [:space:] diperlakukan sebagai kelas karakter biasa, dan cocok dengan satu karakter, baik :, s (1sb memiliki s setelah digit), p, a, c atau e.

person Wiktor Stribiżew    schedule 07.08.2017

Solusi sederhananya adalah:

/^\d+\s+/

Perhatikan bahwa \s+ tidak hanya menangkap spasi, tetapi juga tab dan jeda baris. Ini mungkin penting untuk kasus Anda.

person zhulien    schedule 07.08.2017