Возвращать строку до совпадения строки в Ruby - PullRequest
15 голосов
/ 23 сентября 2011

Как вернуть часть строки до первого экземпляра " #" или " Apt"?

Я знаю, что могу разбить строку на массив на основе "#" или "Apt" и затем вызвать .first, но должен быть более простой способ.

Ответы [ 4 ]

35 голосов
/ 23 сентября 2011

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

string.split(/#|Apt/).first
3 голосов
/ 23 сентября 2011

Я бы написал метод, чтобы прояснить это.Примерно так, например:

class String
    def substring_until(substring)
        i = index(substring)
        return self if i.nil?
        i == 0 ? "" : self[0..(i - 1)]
    end
end
2 голосов
/ 23 сентября 2011

Использовать String # [] метод. Как это:

[
  '#foo',
  'foo#bar',
  'fooAptbar',
  'asdfApt'
].map { |str| str[/^(.*)(#|Apt)/, 1] } #=> ["", "foo", "foo", "asdf"]
1 голос
/ 23 сентября 2011

Я не так много пишу в ruby, но я уверен, что вы могли бы использовать регулярное выражение в виде

^.*(#|Apt)

Или, если вы поместите строку в токенизатор, вы можете что-то с этим сделать, но это будет сложнее, если вы ищете слово, а не только один символ.

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