2008-12-16 46 views
19

Làm cách nào để xóa "1" đầu tiên khỏi chuỗi bất kỳ nếu chuỗi đó bắt đầu bằng "1"?Xóa ký tự khỏi chuỗi nếu ký tự bắt đầu bằng ký tự đó?

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

Tôi đang nghĩ đến việc làm

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

nhưng tôi tự hỏi có một cách tốt hơn. Cảm ơn!

+0

có thể trùng lặp của [gì là cách dễ nhất để loại bỏ các ký tự đầu tiên từ một chuỗi?] (https: // stackoverflow.com/questions/3614389/what-is-the-dễ nhất-cách-to-remove-the-first-character-từ-một chuỗi) – SRack

Trả lời

31

Tại sao không chỉ bao gồm regex trong phương thức sub!?

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

nếu bạn đang đi để sử dụng regex cho trận đấu, bạn cũng có thể sử dụng nó cho việc thay thế

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

BTW, %r{} chỉ là một cú pháp thay thế cho biểu thức thông thường. Bạn có thể sử dụng% r theo sau bởi bất kỳ ký tự nào, ví dụ: %r!^1!.

+1

"BTW, các% r {} cú pháp cho các biểu thức thông thường cho phép bạn tránh thoát/trong biểu thức. " - Nhưng bây giờ bạn có hai nhân vật mà bạn cần phải trốn thoát thay vì một nhưng điểm là tranh luận vì không có nhân vật nào trong câu hỏi thậm chí xuất hiện trong mẫu. –

+0

Nó chỉ là một sở thích chủ quan. Tôi cho rằng/là một ký tự phổ biến hơn {}. BTW của tôi là một lời giải thích trong trường hợp OP chưa thấy cú pháp% r {} trước đây. –

1

Cẩn thận khi sử dụng sub!(/^1/,'')! Trong trường hợp chuỗi không khớp với /^1/, nó sẽ trả về nil. Có lẽ bạn nên sử dụng sub (không có tiếng nổ).

+0

Không, nó sẽ * trả về * nil trong trường hợp đó, nhưng chuỗi gốc sẽ không thay đổi. Nếu bạn chỉ sử dụng 'sub', bạn sẽ phải thực hiện chuỗi dài hơn = string.sub (/^/, ''). –

0

Tôi muốn gửi một cải tiến nhỏ để câu trả lời nếu không xuất sắc bởi Zach. ^ khớp với đầu mỗi dòng trong Ruby regex. Điều này có nghĩa là có thể có nhiều kết quả phù hợp trên mỗi chuỗi. Kenji hỏi về sự khởi đầu của chuỗi có nghĩa là họ phải sử dụng regex này thay vì:

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

Hãy so sánh this - multiple matches với this - one match.

1

Vì Ruby 2.5, bạn có thể sử dụng delete_prefix hoặc delete_prefix! để đạt được điều này một cách dễ đọc.

Trong trường hợp này "1hello world".delete_prefix("1"). Thông tin

More đây:

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. bạn cũng có thể sử dụng điều này để xóa các mục từ cuối chuỗi bằng delete_suffix và delete_suffix!

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

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

Tôi đã trả lời trong một chi tiết nhỏ hơn (với tiêu chuẩn) ở đây: What is the easiest way to remove the first character from a string?

Các vấn đề liên quan