Как использовать String.delete для удаления '<em>' из строки в Ruby? - PullRequest
1 голос
/ 31 января 2012

Я уверен, что могу сделать это с помощью регулярного выражения, но я не могу найти никакого объяснения этому поведению, используя только обычные delete!:

#1.9.2
>> "helllom<em>".delete!"<em>"  
=> "hlllo"

Документам нечего сказать по этому поводу. Сдается мне, что он рассматривает '<em>' как набор. Где это задокументировано?

Редактировать: в свою защиту я искал специальную обработку <и> в документах при удалении. Ничего не видел об этом и попробовал Google, который также не имел ничего сказать об этом - потому что он не существует.

Ответы [ 3 ]

4 голосов
/ 31 января 2012

String#delete - один из тех неудачных методов, который трудно объяснить (я понятия не имею, каков вариант использования).На практике я всегда использовал gsub с пустой строкой в ​​качестве второго аргумента.

'helllom<em>'.gsub '<em>', '' # => "helllom"

Обратите внимание, что String#gsub! также имеет странность, так что вы не должны зависеть от его возвращаемого значения, он вернет nil, если она не изменяет строку, поэтому лучше использовать gsub, если вы зависите от возвращаемого значения, или если вы хотите изменить строку, тогда используйте gsub!, но больше ничего не используйте наэта линия.

2 голосов
/ 31 января 2012

Вы не можете использовать String # delete для удаления подстрок.

Проверьте API . Удаляет все символы из заданных параметров из заданной строки.

В вашем случае он удаляет все вхождения e, m, < и >.

0 голосов
/ 31 января 2012

Прямо из документов:

delete([other_str]+) → new_str 

Возвращает копию строки со всеми символами на пересечении ее аргументы удалены. Использует те же правила для построения набора количество символов в строке #.

например:

"hello".delete "l","lo"        #=> "heo"
"hello".delete "lo"            #=> "he"
"hello".delete "aeiou", "^e"   #=> "hell"
"hello".delete "ej-m"          #=> "ho"

Таким образом, каждый символ в пересечении двух строк удаляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...