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