Kami akan menggunakan regex di bawah ini untuk mendapatkan digit sebelum kata-kata.
Contoh:
838123 someWord 8 someWord 12 someWord
(\d+)\s*someWord
Tapi kadang-kadang apa pun akan datang antara Angka dan kata. Silakan lihat contoh di bawah ini.
Ex:
43434 dariordord 12 apa punordord 2323ordord baru
Bagaimana cara mendapatkan angka yang tepat sebelum kata itu menggunakan regex?
Tolong beri saya saran Anda.
Jawaban:
Melakukan hal ini:
(\d+)[^\d]+some[wW]ord
Anda harus menerima apa pun selain angka itu sendiri. Saya juga mempertimbangkan keduanya
w
danW
karena contoh Anda mengandung keduanya.Demo
sumber
Menganggap bahwa "apa pun" tidak termasuk angka, Anda dapat menggunakan regex ini:
Demo di regex101
sumber
Satu kemungkinan "kasus sudut terjawab" dari jawaban CinCout adalah jika kecocokan untuk
someWord
harus tepat, misalnya jikanotsomeWord
dansomeWordNotThis
tidak harus dicocokkan.Ekstensi berikut untuk ekspresi reguler itu menyediakan cara untuk mengatasi ini:
(\d+)[^\d]*[^\w]some[wW]ord[^\w]
Penjelasan: The
[^\w]
sebelum atau setelah matcher untuksomeWord
mencari sebuah "karakter non-kata" sebelum dan setelah - sebuah akhir baris juga penting di sini. Ini tentu saja dapat dibuat lebih kompleks / spesifik, tergantung pada persyaratan yang tepat.Demo
sumber
Anda dapat mencoba sesuatu seperti ini:
Anda dapat melihat tesnya di sini
sumber
pertama-tama pisahkan
some[wW]ord
,number
danspace
dengan sebuah pola, kemudian jalankan pola kedua di atasnyaKetika pola pertama dijalankan, kalimat akan seperti yang diinginkan
perubahan:
sumber
Tapi kadang-kadang apa pun akan datang antara Angka dan kata. Silakan lihat contoh di bawah ini.
Ex:
coba ini
Dijelaskan
Demo
sumber
Menggunakan
\s*
hanya akan cocok dengan 0 atau lebih karakter spasi putih.Anda bisa menggunakan
\D+
tetapi itu juga akan cocok dengan baris baru karena cocok dengan karakter apa pun kecuali angka.Jika Anda ingin mencocokkan digit pada baris yang sama, Anda dapat menambahkan tidak cocok dengan baris baru ke kelas karakter yang dinegasikan
[^\d\r\n]
Dalam contoh Anda, Anda menggunakan
\d
, tetapi jika Anda hanya ingin mencocokkan 1 atau lebih angka 0-9 Anda bisa menggunakan kelas karakter[0-9]+
Untuk mencegah angka dan kata menjadi bagian dari kata yang lebih besar, Anda dapat menggunakan batas kata
\b
Jika Anda ingin mencocokkan kata dengan case case insensitive, Anda bisa menggunakan
RegexOptions.IgnoreCase
atau pengubah inline(?i)
Lihat demo .NET regex
sumber
Gunakan Capture Bernama Pencocokan (Untuk mendapatkan data gunakan
mtch.Groups["Value"].Value
... dll) untuk mengekstrak informasi sesuai kebutuhan.Ketika hal di atas dijalankan ( dengan cara
IgnorePatternWhiteSpace
lain hapus komentar dan gabungkan pola untuk menjalankannya seperti(?<Value>\d+)(?<Other>.+?)(?<Key>someword)
tanpa opsi regex ) mendapat data untuk setiap data / pasangan Key dan mengatur masing-masing dalam satu pertandingan.Hasil
Berikut ini adalah hasil (untuk contoh kedua Anda) yang semuanya terkandung dalam pertandingan individu dan kelompok dan tangkapan mereka menyediakan di setiap pertandingan:
Secara visual inilah yang cocok:
sumber