Как удалить первые 4 символа из строки, если она соответствует шаблону в Ruby - PullRequest
4 голосов
/ 23 мая 2010

У меня есть следующая строка:

"h3. My Title Goes Here" 

В основном я хочу удалить первые четыре символа из строки, чтобы я просто вернулся:

"My Title Goes Here".  

Дело в том, что я перебираю массив строк, и не у всех есть часть h3. впереди, поэтому я не могу просто слепо бросить первые четыре символа.

Я проверил документы, и самое близкое, что я смог найти, было chomp, но это работает только для конца строки.

Прямо сейчас я делаю это:

"h3. My Title Goes Here".reverse.chomp(" .3h").reverse

Это дает мне желаемый результат, но должен быть лучший способ. Я не хочу переворачивать строку дважды без причины. Есть ли другой метод, который будет работать?

Ответы [ 3 ]

3 голосов
/ 23 мая 2010

Вы можете использовать sub с регулярным выражением:

s = 'h3. foo'
s.sub!(/^h[0-9]+\. /, '')
puts s

Выход:

foo

Регулярное выражение следует понимать следующим образом:

^     Match from the start of the string.
h     A literal "h".
[0-9] A digit from 0-9.
+     One or more of the previous (i.e. one or more digits)
\.    A literal period.
      A space (yes, spaces are significant by default in regular expressions!)

Вы можете изменить регулярное выражение в соответствии со своими потребностями. См. Учебник по регулярным выражениям или руководство по синтаксису, например здесь .

3 голосов
/ 23 мая 2010

Чтобы изменить исходную строку, используйте sub!, например ::

my_strings = [ "h3. My Title Goes Here", "No h3. at the start of this line" ]
my_strings.each { |s| s.sub!(/^h3\. /, '') }

Чтобы не изменять оригинал и только возвращать результат, удалите восклицательный знак, т. Е. Используйте sub. В общем случае у вас могут быть регулярные выражения, которым вы можете и хотите соответствовать более одного экземпляра, в этом случае используйте gsub! и gsub - без g заменяется только первое совпадение (как вы хотите здесь и в любом случае ^ может совпадать только один раз с началом строки).

2 голосов
/ 23 мая 2010

Стандартный подход заключается в использовании регулярных выражений :

"h3. My Title Goes Here".gsub /^h3\. /, '' #=> "My Title Goes Here"

gsub означает глобальную замену и заменяет шаблон строкой, в данном случае пустой строкой.

Регулярное выражение заключено в / и состоит из:

^ означает начало строки
h3 соответствует буквально, так что это означает h3
\. - точка обычно означает любой символ, поэтому мы экранируем его обратной косой чертой
соответствует буквально

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