2016-01-05 5 views
0

Я хочу получить слова слева и справа от строки. Например, если вся строка:Поиск слов слева и справа от строки

"Programming is my passion" 

Я хочу, чтобы извлечь слова слева и справа от "is": "Programming" и "my".

+0

Как следует эта функция работает, если приговор вместо '«Программирование это моя страсть, потому что это очень интересно»', так как в настоящее время существует два экземпляра «является» в предложении? – jeffdill2

ответ

1
\b(\w+) is (\w+)\b 

Теперь возьмите группы 1 и 2 матча.

sentence = 'Programming is my passion' 
word  = 'is' 
matches = sentence.match(/\b(\w+) #{word} (\w+)\b/) 

matches[1] # => "Programming" 
matches[2] # => "my" 

Идея такова:

  • \b - граница слова
  • (\w+) - столько символов слов, как это возможно, содержится в пронумерованных группе
0

Вы можете использовать следующие:

\b(\w+)\b\s+is\s+\b(\w+)\b 
      ^^ 
0

с переменными:

string = 'Programming is my passion' 

matchers = string.match(/(?<before>\w+)?\s?is\s?(?<after>\w*)?/) 

matchers[:before] # "Programming" 
matchers[:after] # "my" 

string = 'Programmingismy passion' 
# same tesults 

http://rubular.com/r/MvUFf9WVF7

1

Вот одно решение;

str = "Programming is my passion" 
word = "is" 
words = str.split(/\W/) 
index = words.index(word) 
before, after = words[index-1], words[index+1] if index > 0 
p before 
#=> "Programming" 
p after 
#=> "my" 
+0

[Шляпы выключены] (http://askandyaboutclothes.com/wp-content/uploads/2011/12/HatTipCartoon.jpg) благородному пользователю SO, который проголосовал за этот ответ, поскольку голосование становится [редким] (http://stackoverflow.com/a/34595416/794242) –

0

Решение без регулярных выражений, но с each_cons().

str = "Programming is my passion" 

def neighbors(s, w) 
    s.split(/\W/) 
    .each_cons(3) 
    .find { |_,e,_| e == w } 
    .reject { |e| e == w } 
end 

before, after = neighbors(str, 'is') 
0
def neighbours str, pattern 
    str.scan(/(\S*)\s+#{pattern}\s+(\S*)/).flatten 
end 

neighbours 'Programming is my passion', 'is' 
#⇒ ["Programming", "my"] 
Смежные вопросы