Что такое функция Ruby для удаления все пустое место? Вид как php's trim()
?Функция Ruby для удаления всех пробелов?
ответ
s = "I have white space".delete(' ')
И подражать trim()
функции РНР:
s = " I have leading and trailing white space ".strip
Это гораздо читательнее, чем регулярное выражение, почему оно не так популярно? – ckarbass
@ckarbass: Потому что многие люди предпочитают слишком сложные решения для простых задач. Он уходит с опытом. –
Я думаю, это потому, что многие люди на самом деле ищут полосу. Даже тот, который упоминает только полосу, выше этой записи. –
Связанные ответ:
" clean up my edges ".strip
возвращает
"clean up my edges"
Это тот, о котором я забыл. Я знал, что существует метод удаления пробелов, который будет делать это по умолчанию, если аргументы не были переданы. +1 –
Это эквивалентно отделке. Пожалуйста, обратитесь к цитате из @Tadeck выше. –
Если существует вероятность того, что переменная 'nil', перед запуском полосы обязательно запустите метод' .to_s', чтобы метод полосы не вызывал ошибку. Ex. 'Ул = ноль; str.to_s.strip # => "" ' – scarver2
Также не стоит забывать:
$ s = " I have white space ".split
=> ["I", "have", "white", "space"]
Так что s.split.join выполнит эту работу. –
Это хорошо, когда итерация: '[" Hello World "," Big Giraffe "] .map (&: split) .map (&: join) # => [" HelloWorld "," BigGiraffe "]' – tbloncar
Если вы хотите удалить только начальные и конечные пробелы (например, аккуратным PHP), вы можете использовать .strip
, но если вы хотите, чтобы удалить все пробельные, вы можете использовать вместо .gsub(/\s+/, "")
.
Делает ли "/ \ s +/"простые средние пробелы? –
\ s + означает 1 или более пробельных символов (пробел, символ новой строки, вкладка). // окружающее показывает, что это регулярное выражение. – dylanfm
Это не соответствует обрезке() –
Это немного поздно, но кто-то прибегая к помощи этой страницы могут быть заинтересованы в этой версии -
Если вы хотите, чтобы очистить кусок предварительно отформатированный текст, который пользователь может обрезанный & вставить в ваше приложение как-то, но сохранить межсловное, попробуйте следующее: метод
content = " a big nasty chunk of something
that's been pasted from a webpage or something and looks
like this
"
content.gsub(/\s+/, " ").strip
#=> "a big nasty chunk of something that's been pasted from a webpage or something and looks like this"
Можно также использовать метод «squish» Rails: http://apidock.com/rails/String/squish –
Или, если у вас нет Rails, и у вас нет линий новой строки, 'squeeze (" ")' может работать. –
Руби .strip
выполняет PHP эквивалент trim()
.
Чтобы удалить все пробелы:
" leading trailing ".squeeze(' ').strip
=> "leading trailing"
@Tass сделал мне известно, что мой первоначальный ответ удаляет повторяющиеся буквы подряд - YUCK! С тех пор я переключился на метод squish, который умнее в таких случаях, если используется Rails-инфраструктура.
require 'active_support/all'
" leading trailing ".squish
=> "leading trailing"
" good men ".squish
=> "good men"
Это приведет к удалению «соединенных» дубликатов символов. '« хорошие люди ».squeeze.strip' вернут« боги »' – Tass
Спасибо, что указали это на @Tass. Я отредактировал свой ответ в пользу метода squish. – scarver2
+1 для «дубликатов букв подряд». Я не мог придумать способ описания сценария. Отлично сработано! :-) – Tass
"1232 23 2 23 232 232".delete(' ')
=> "123223223232232"
Удалять работает быстрее =)
user system total real
gsub, s 0.180000 0.010000 0.190000 (0.193014)
gsub, s+ 0.200000 0.000000 0.200000 (0.196408)
gsub, space 0.220000 0.000000 0.220000 (0.222711)
gsub, join 0.200000 0.000000 0.200000 (0.193478)
delete 0.040000 0.000000 0.040000 (0.045157)
Отличный ответ. Спасибо, что сделали тест. –
, но это удаляет только «пробелы», а не все «белые пробелы» – Gavriel
"asd sda sda sd".gsub(' ', '')
=> "asdsdasdasd"
, но это удаляет только «пробелы», а не все «белые пробелы» – Gavriel
" Raheem Shaik ".strip
Он удаляет влево & правую боковые пространства. Этот код предоставит нам: "Raheem Shaik"
Вы можете использовать метод squish
. Он удаляет пустое пространство на обоих концах строки и группирует несколько пробелов в одно пространство.
Для примера.
" a b c ".squish
приведет к:
"a b c"
Проверьте this reference from api.rubyonrails.org.
EDIT: Он работает только для рубина на рельсах
. Обратите внимание, что [ссылки только ответы] (http://meta.stackoverflow.com/ теги/ссылки-только-ответы/информация) не рекомендуется, SO-ответы должны быть конечной точкой поиска решения (против еще одной остановки ссылок, которые со временем устаревают). Пожалуйста, подумайте о добавлении отдельного резюме здесь, сохранив ссылку в качестве ссылки. – kleopatra
Я думаю, что этот ответ был достаточно объяснен и тот факт, что ссылка была ссылкой, поскольку сам ответ был ясен. Эта функция была хорошей, спасибо – ksugiarto
Это работает только в рубине на рельсах –
split.join
будет взорвать все пробелы в любом месте строки.
" a b c d ".split.join
> "abcd"
Легко печатать и запоминать, так что это приятно на консоли и для быстрого взлома. Возможно, он не приветствуется в серьезном коде, хотя он маскирует намерение.
(Основано на комментарий Петр в Justicle's answer выше.)
Большое спасибо за этот комментарий :-) Это единственный метод это работает, если у вас длинная строка, которая выглядит как абзац. – Boomerange
Вы могли бы попробовать это
"Some Special Text Values".gsub(/[[:space:]]+/, "")
использованием : пространство: удаляет неразрывный пробел наряду с регулярным пространством.
Это на самом деле лучший ответ IMHO, так как в диком HTML '& nbsp' и любые другие пробелы, отличные от ASCII, ** не будут удаляться' String # strip' или совпадают с '/ \ s /'. См. Раздел «Выражения скобок POSIX» в [Regexp docs] (https://ruby-doc.org/core-2.4.2/Regexp.html) – MatzFan
Используйте gsub или удалите. Разница заключается в том, что gsub может удалять вкладки, а delete не может. Иногда у вас есть вкладки в файлах, которые добавляются редакторами.
a = "\tI have some whitespaces.\t"
a.gsub!(/\s/, '') #=> "Ihavesomewhitespaces."
a.gsub!(/ /, '') #=> "\tIhavesomewhitespaces.\t"
a.delete!(" ") #=> "\tIhavesomewhitespaces.\t"
a.delete!("/\s/") #=> "\tIhavesomewhitespaces.\t"
a.delete!('/\s/') #=> using single quote is unexpected, and you'll get "\tI have ome whitepace.\t"
Мои личные предпочтения использует метод .tr
как в:
string = "this is a string to smash together"
string.tr(' ', '') # => "thisisastringtosmashtogether"
Благодаря @FrankScmitt для указания на то, что сделать это удалить все пробельные (не только пробелы) вам необходимо будет написать его как таковое:
string = "this is a string with tabs\t and a \nnewline"
string.tr(" \n\t", '') # => "thisisastringwithtabsandanewline"
, но это удаляет только «пробелы», а не «все пробелы» ' – Gavriel
Чтобы удалить все пробелы (пробел, табуляцию, новую строку), используйте вместо этого' s.tr ("\ t \ n", '') '. –
@ Gavriel - я неправильно понял/неправильно понял вопрос, спасибо за указание на это. –
Ruby's .scan()
и .join()
методы String также могут помочь преодолеть пробелы в строке.
scan(/\w+/).join
удалит все пробелы и присоединиться строку
string = "White spaces in me".scan(/\w+/).join
=>"Whitespacesinme"
Он также удаление пространства с левой и правой части строки. Средства ltrim
, rtrim
и trim
. На всякий случай, если у кого-то есть фон за C
, FoxPro
или Visual Basic
и прыгать в Ruby
.
2.1.6 :002 > string = " White spaces in me ".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :003 > string = " White spaces in me".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :004 > string = "White spaces in me ".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :005 >
@AmitPandya Большое спасибо за указание дополнительных ключевых моментов метода .scan(). Оцените !!! –
Для поведения в точности сопоставления PHP trim
, самый простой способ заключается в использовании метода String#strip
, например, так:
string = " Many have tried; many have failed! "
puts "Original [#{string}]:#{string.length}"
new_string = string.strip
puts "Updated [#{new_string}]:#{new_string.length}"
Рубин также имеет редактирование на месте версию, а также, String.strip!
(обратите внимание на конечный '!').Это не требует создания копии строки, и может быть значительно быстрее, для некоторых применений:
string = " Many have tried; many have failed! "
puts "Original [#{string}]:#{string.length}"
string.strip!
puts "Updated [#{string}]:#{string.length}"
Оба версий производит этот вывод:
Original [ Many have tried; many have failed! ]:40
Updated [Many have tried; many have failed!]:34
я создал тест, чтобы проверить производительность некоторые основные виды использования strip
и strip!
, а также некоторые альтернативы. Тест заключается в следующем:
require 'benchmark'
string = 'asdfghjkl'
Times = 25_000
a = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
b = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
c = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
d = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
puts RUBY_DESCRIPTION
puts "============================================================"
puts "Running tests for trimming strings"
Benchmark.bm(20) do |x|
x.report("s.strip:") { a.each {|s| s = s.strip } }
x.report("s.rstrip.lstrip:") { a.each {|s| s = s.rstrip.lstrip } }
x.report("s.gsub:") { a.each {|s| s = s.gsub(/^\s+|\s+$/, "") } }
x.report("s.sub.sub:") { a.each {|s| s = s.sub(/^\s+/, "").sub(/\s+$/, "") } }
x.report("s.strip!") { a.each {|s| s.strip! } }
x.report("s.rstrip!.lstrip!:") { b.each {|s| s.rstrip! ; s.lstrip! } }
x.report("s.gsub!:") { c.each {|s| s.gsub!(/^\s+|\s+$/, "") } }
x.report("s.sub!.sub!:") { d.each {|s| s.sub!(/^\s+/, "") ; s.sub!(/\s+$/, "") } }
end
Таковы результаты:
ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-darwin14]
============================================================
Running tests for trimming strings
user system total real
s.strip: 2.690000 0.320000 3.010000 ( 4.048079)
s.rstrip.lstrip: 2.790000 0.060000 2.850000 ( 3.110281)
s.gsub: 13.060000 5.800000 18.860000 (19.264533)
s.sub.sub: 9.880000 4.910000 14.790000 (14.945006)
s.strip! 2.750000 0.080000 2.830000 ( 2.960402)
s.rstrip!.lstrip!: 2.670000 0.320000 2.990000 ( 3.221094)
s.gsub!: 13.410000 6.490000 19.900000 (20.392547)
s.sub!.sub!: 10.260000 5.680000 15.940000 (16.411131)
String#strip
- удалить все пробелы из начала и конца.
String#lstrip
- с самого начала.
String#rstrip
- только с конца.
String#chomp
(без аргументов) - удаляет разделители строк (\n
или \r\n
) с конца.
String#chop
- удаляет последний символ.
String#delete
- x.delete(" \t\r\n")
- удаляет все перечисленные пробелы.
String#gsub
- x.gsub(/[[:space:]]/, '')
- удаляет все пробелы, в том числе unicode ones.
Примечание: Все методы выше возвращают новую строку вместо мутирует оригинал. Если вы хотите изменить строку на месте, вызовите соответствующий метод с !
в конце.
Пример удаления String #, как представляется, использует регулярное выражение, но '\ s' находится в кавычках вместо косой черты. Кроме того, я не мог найти упоминания в документации, которую delete может принимать регулярное выражение в качестве аргумента. – slothbear
@slothbear, это не регулярное выражение, это небольшой набор шаблонов, которые напоминают регулярные выражения. Что касается документации ['# delete'] (https://ruby-doc.org/core-2.4.0/String.html#method-i-delete), как говорят, работает аналогично [' # count'] (https://ruby-doc.org/core-2.4.0/String.html#method-i-count).Вы можете попробовать его и в консоли. – ndn
Спасибо, что научили меня чему-то новому. А также спасибо за напоминание о том, чтобы попробовать вещи в наименьшем возможном контексте (командной строке). – slothbear
Я пытался сделать это, поскольку я хотел использовать записи «title» как идентификатор в представлении, но названия имели пробелы.
решение является:
record.value.delete(' ') # Foo Bar -> FooBar
Вы можете попробовать это:
"ab c d efg hi ".split.map(&:strip)
для того, чтобы получить это:
["ab, "c", "d", "efg", "hi"]
или если вы хотите одну строку, просто использовать :
"ab c d efg hi ".split.join
Я хотел бы использовать что-то вроде этого:
my_string = "Foo bar\nbaz quux"
my_string.split.join
=> "Foobarbazquux"
прямо. благодаря –
Метод GSUB будет делать только штрафом.
Метод GSUB можно назвать на нитке и говорит:
a = "this is a string"
a = a.gsub(" ","")
puts a
#Output: thisisastring
GSUB поиски метод для каждого вхождения первого аргумента и заменяет его вторым аргументом. В этом случае он заменяет каждое пространство внутри строки и удаляет ее.
Другой пример:
b = "the white fox has a torn tail"
Давайте заменим каждое вхождение буквы «т» с большой буквы «Т»
b = b.gsub("t","T")
puts b
#Output: The whiTe fox has a Torn Tail
- 1. Функция для удаления всех переменных
- 2. Непрочный способ удаления пробелов из переменной Ruby?
- 3. Regex для удаления пробелов
- 4. Функция C для удаления всех прописных символов
- 5. PHP функция для удаления всех недопустимых символов
- 6. Удаление всех пробелов из строки в Ruby
- 7. Программа C для удаления всех ненужных пробелов из строки
- 8. Вспомогательная функция для удаления/удаления всех данных сущности, EF
- 9. javascript regex для удаления пробелов, почему?
- 10. Регулярное выражение для удаления пробелов
- 11. Программа для удаления предшествующих пробелов
- 12. Регулярного выражения для удаления пробелов между границами
- 13. Использования AWK для удаления пробелов из поля
- 14. функция удаления для databaseobject
- 15. Метод удаления всех файлов в Ruby
- 16. VS2010 - Чернила для всех пробелов
- 17. Регулярные выражения для удаления пробелов и пробелов в PHP?
- 18. Функция удаления всех в классе массивы
- 19. Более эффективный способ удаления пробелов
- 20. Функция удаления ведущих пробелов не изменяет строку в вызывающем?
- 21. Регулярное выражение для удаления пробелов между '[' и ']'
- 22. Javascript для удаления пробелов из текстового поля
- 23. XSLT для удаления пробелов из текстовых узлов
- 24. Regex для удаления пробелов и скобок?
- 25. Команда SED для удаления конечных пробелов
- 26. Регулярное выражение для удаления пробелов в коде
- 27. Java Pattern RegEx для условного удаления пробелов
- 28. Программа для удаления завершающих пробелов не работает! :(
- 29. .bat скрипт для удаления конечных пробелов
- 30. Функция удаления для MySQLI
Ваш вопрос не ясно: Вы хотите, чтобы удалить все пробелы или вы хотите избавиться от ведущих и конечных пробелов? –
PHP ['trim()'] (http://php.net/manual/en/function.trim.php) разделяет пробелы "_ от начала и конца строки_" (как указано в [документации] (http: //php.net/manual/en/function.trim.php)), он не удаляет «все пробелы». – Tadeck
Если у вас есть сомнения, посмотрите онлайн-документацию Ruby для класса String (см. Ниже .strip). – Merovex