Bagaimana saya bisa mengekstraksi substring dari dalam string di Ruby?
Contoh:
String1 = "<name> <substring>"
Saya ingin mengekstrak substringdari String1(yaitu segala sesuatu dalam kemunculan terakhir dari <dan >).
Bagaimana saya bisa mengekstraksi substring dari dalam string di Ruby?
Contoh:
String1 = "<name> <substring>"
Saya ingin mengekstrak substringdari String1(yaitu segala sesuatu dalam kemunculan terakhir dari <dan >).
Jawaban:
String1.scan(/<([^>]*)>/).last.first
scanmenciptakan sebuah array yang, untuk masing-masing <item>in String1berisi 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). lastmemberi Anda yang terakhir dari array itu dan firstkemudian 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 resultsolusi saya. Dan match()[]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):
str.match(/< ?([^>]+) ?>\Z/)[1]
Atau tanpa spasi diizinkan:
str.match(/<([^>]+)>\Z/)[1]
<>benar-benar harus menjadi hal terakhir dalam string. Jika mis. String foo <bar> bazdibolehkan (dan seharusnya memberikan hasilnya bar), ini tidak akan berfungsi.
Berikut ini pendekatan yang sedikit lebih fleksibel menggunakan matchmetode ini. Dengan ini, Anda dapat mengekstraksi lebih dari satu string:
s = "<ants> <pants>"
matchdata = s.match(/<([^>]*)> <([^>]*)>/)
# Use 'captures' to get an array of the captures
matchdata.captures # ["ants","pants"]
# Or use raw indices
matchdata[0] # whole regex match: "<ants> <pants>"
matchdata[1] # first capture: "ants"
matchdata[2] # second capture: "pants"