Как получить подстроку от начала до конца слова, начинающегося с данной подстроки - Ruby - PullRequest
1 голос
/ 08 марта 2020

В Ruby я пытаюсь получить подстроку от начала до конца слова, начинающегося с некоторой строки.

Например:

a = "Metrics testSomeMetrics gets initial metrics data"

I также есть строка, которая является подстрокой a.

Например:

b = "test".

"test" появляется во втором слове строки a.

Мне нужно вернуть подстроку с начала a до конца слова с test в нем.

В этом примере мне нужно вернуть: "Metrics testSomeMetrics"

Ответы [ 3 ]

4 голосов
/ 08 марта 2020

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

a = 'Metrics testSomeMetrics gets initial metrics data'
b = 'test'
a.match(/^.*#{b}\w*/).to_s

Где:

  • ^ - начало строки.
  • .* - ноль или более любого один символ.
  • #{b} - ваша строка.
  • \w* - ноль или более любого символа слова.

ОБНОВЛЕНИЕ

Добавьте \b, чтобы получить /^.*\b#{b}\w*/, чтобы b было точно началом новой строки.

1 голос
/ 09 марта 2020

Мне не удалось найти регулярное выражение, которое работает здесь. Однако можно сделать следующее:

def get_juicy_bit(str, word)
  str.match(/\b#{word}\S+/) { |md| str[0...md.end(0)] }
end

word = "test"

get_juicy_bit("Metrics testSomeMetrics gets data", word)
  #=> "Metrics testSomeMetrics" 
get_juicy_bit("Metrics     testSomeMetrics gets data", word)
  #=> "Metrics     testSomeMetrics" 
get_juicy_bit("Metrics donottestMetrics gets data", word)
  #=> nil 
get_juicy_bit("testMetrics gets data", word)
  #=> "testMetrics" 
get_juicy_bit("   testMetrics gets data", word)
  #=> "   testMetrics" 

См. MatchData # конец . Регулярное выражение /\b#{word}\S+/ гласит: «соответствует разрыву слова (\b), за которым следует значение переменной word, за которым следуют один или несколько символов, отличных от пробела». Здесь разрыв слова - это символ, отличный от символа слова (буква, ди git или подчеркивание) или начало строки.

0 голосов
/ 08 марта 2020

Один из способов go:

Сначала разбейте вашу строку на массив слов. Затем найдите индекс первого слова, которое включает в себя образец. Наконец, из найденного индекса создайте подстроку оригинала (от 0 до найденного индекса).

a = "Metrics testSomeMetrics gets initial metrics data"
b = "test"
words = a.split(" ")

index = words.find_index { |word| word.include?(b) }
return "" unless index

words.slice(0..index).join(" ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...