Bagaimana saya bisa mengekstraksi substring dari dalam string di Ruby?
Contoh:
String1 = "<name> <substring>"
Saya ingin mengekstrak substring
dari String1
(yaitu segala sesuatu dalam kemunculan terakhir dari <
dan >
).
String1.scan(/<([^>]*)>/).last.first
scan
menciptakan sebuah array yang, untuk masing-masing <item>
in String1
berisi teks antara <
dan >
dalam array satu elemen (karena ketika digunakan dengan regex yang berisi grup penangkap, pemindaian menciptakan sebuah array yang berisi tangkapan untuk setiap pertandingan). last
memberi Anda yang terakhir dari array itu dan first
kemudian memberi Anda string di dalamnya.
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"
Tidak perlu digunakan scan
, jika kita hanya butuh satu hasil.
Tidak perlu menggunakan Python match
, ketika kita memiliki Ruby String[regexp,#]
.
Lihat: http://ruby-doc.org/core/String.html#method-i-5B-5D
catatan: str[regexp, capture] → new_str or nil
if we need only one result
solusi saya. Danmatch()[]
lebih lambat, karena itu dua metode, bukan satu.string[regex]
bisa sama terbaca dalam skenario ini, jadi itulah yang saya gunakan secara pribadi.Anda dapat menggunakan ekspresi reguler untuk itu dengan mudah ...
Mengizinkan spasi di sekitar kata (tetapi tidak disimpan):
Atau tanpa spasi diizinkan:
sumber
<>
benar-benar harus menjadi hal terakhir dalam string. Jika mis. Stringfoo <bar> baz
dibolehkan (dan seharusnya memberikan hasilnyabar
), ini tidak akan berfungsi.Berikut ini pendekatan yang sedikit lebih fleksibel menggunakan
match
metode ini. Dengan ini, Anda dapat mengekstraksi lebih dari satu string:sumber
Scan yang lebih sederhana adalah:
sumber