Простая задача регулярных выражений в Rails - PullRequest
0 голосов
/ 18 декабря 2010

Хорошо.Уже поздно, и я устал.

Я хочу сопоставить символ в строке.В частности, появление «а».Как в «полтора».

Если у меня есть строка, которая все строчные.неправильно, потому что «И» и «А» должны быть строчными.Очевидно.

Итак, я могу сделать

"One and a Half Is always Good".titleize.tr('And', 'and') #=> "One and a Half Is always Good"

Мой вопрос: как сделать «А» «а» и не превращая «Всегда» в «всегда»?

Ответы [ 2 ]

2 голосов
/ 18 декабря 2010

Мне нравится двухстрочный текст Грега (сначала заголовок, а затем регулярное выражение в нижнем регистре выделенных слов.) FWIW, вот функция, которую я использую в своих проектах.Хорошо проверено, хотя гораздо более многословно.Вы заметите, что я перезаписываю titleize в ActiveSupport:

class String
  #
  # A better titleize that creates a usable
  # title according to English grammar rules.
  #
  def titleize
    count  = 0
    result = []

    for w in self.downcase.split
      count += 1
      if count == 1
        # Always capitalize the first word.
        result << w.capitalize
      else
        unless ['a','an','and','by','for','in','is','of','not','on','or','over','the','to','under'].include? w
          result << w.capitalize
        else
          result << w
        end
      end
    end

    return result.join(' ')
  end
end
2 голосов
/ 18 декабря 2010

Это делает:

require 'active_support/all'
str = "one and a half is always good" #=> "one and a half is always good"

str.titleize.gsub(%r{\b(A|And|Is)\b}i){ |w| w.downcase } #=> "One and a Half is Always Good"

или

str.titleize.gsub(%r{\b(A(nd)?|Is)\b}i){ |w| w.downcase } #=> "One and a Half is Always Good"

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

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