2008-12-16 7 views
19

Bu dize "1" ile başlıyorsa, ilk "1" i herhangi bir dizeden nasıl çıkarabilirim?Karakterle başlıyorsa, karakter dizgeden kaldırılsın mı?

"1hello world" => "hello world" 
"112345" => "12345" 

Ben

string.sub!('1', '') if string =~ /^1/ 

yapmayı düşünüyorum ama daha iyi bir yolu var merak'. Teşekkürler!

+0

Olası yinelenen [Ne dizesinden ilk karakteri kaldırmak için en kolay yolu nedir?] (https: // stackoverflow.com/questions/3614389/what-is-a-string-ilk-karakter-çıkar-dize) – SRack

cevap

31

Neden regex'i sub! yöntemine dahil etmiyoruz? Eğer maç için normal ifadeler kullanabilirsiniz gidiyoruz

string.sub!(/^1/, '') 
7

, siz de değiştirilmesi BTW

string.sub!(%r{^1},"") 

için kullanabilir, %r{} normal ifadeler için sadece alternatif bir sözdizimi. % R'yi kullanarak herhangi bir karakter kullanabilirsiniz. %r!^1!.

+1

"BTW, normal ifadeler için% r {} sözdizimi kaçışını engellemenizi sağlar./ifadesinde. - Ama şimdi iki karakterin yerine birinden kaçmak zorundasın, ama söz konusu olan karakterlerin hiçbiri desende görünmediği için bu noktaya dikkat etmelisin. –

+0

Sadece öznel bir tercih. {} 'Den daha yaygın bir karakter olduğunu iddia ediyorum. BTW, OP'nin% r {} önce sözdizimi görmemesi durumunda bir açıklamaydı. –

1

sub!(/^1/,'')! Dizenin /^1/ ile eşleşmemesi durumunda nil dönecektir. Muhtemelen sub kullanmalısınız (patlama olmadan).

+0

Hayır, bu durumda * dönüş * döner, ancak orijinal dize değişmeden kalır. Eğer sadece 'sub' kullanırsanız, daha uzun string = string.sub (/^/, '') yapmanız gerekecektir. –

0

Ben Zach tarafından aksi mükemmel cevaba küçücük bir iyileşme sonrası istiyorum. ^, Ruby regex'teki her hattının başlangıcıyla eşleşir. Bu, dize başına birden çok eşleşme olabileceği anlamına gelir.

string.sub!(/\A1/, '') 

this - one match ile this - multiple matches karşılaştırın: Kenji yerine, bu regex kullanmak zorunda anlamına gelir dizenin başından sordu.

1

Ruby 2.5 sürümünden itibaren delete_prefix veya delete_prefix'i kullanabilirsiniz! bunu okunabilir bir şekilde başarmak için. Bu örnekte, "1hello world".delete_prefix("1"). Burada

diğer bilgiler:

https://blog.jetbrains.com/ruby/2017/10/10-new-features-in-ruby-2-5/

https://bugs.ruby-lang.org/issues/12694

'invisible'.delete_prefix('in') #=> "visible" 
'pink'.delete_prefix('in') #=> "pink" 

N.B. Ayrıca bunu bir dizenin sonundan delete_suffix ve delete_suffix ile kaldırmak için kullanabilirsiniz! Burada

'worked'.delete_suffix('ed') #=> "work" 
'medical'.delete_suffix('ed') #=> "medical" 

https://bugs.ruby-lang.org/issues/13665

I (kriterler ile) biraz daha ayrıntılı olarak Yanıtım: What is the easiest way to remove the first character from a string?