Как вы возвращаете часть строки до первого экземпляра " #" или " Apt"?
Я знаю, что я мог бы разбить строку на массив на основе "#" или "Apt", а затем вызвать .first, но должен быть более простой способ.
Ответ 1
Разделение строк определенно проще и читабельнее, чем регулярное выражение. Для регулярного выражения вам понадобится группа захвата, чтобы получить первое совпадение. Он будет таким же, как разделение строк
string.split(/#|Apt/).first
Ответ 2
Я бы написал метод, чтобы сделать его понятным. Что-то вроде этого, например:
class String
def substring_until(substring)
i = index(substring)
return self if i.nil?
i == 0 ? "" : self[0..(i - 1)]
end
end
Я не пишу в Ruby так много, но я уверен, что вы могли бы использовать регулярное выражение вдоль строк
^.*(#|Apt)
Или, если вы поместите строку в токенизатор, вы можете сделать что-то с этим, но это будет более жестким, если вы ищете слово, а не только один символ.