Я хочу получить слова слева и справа от строки. Например, если вся строка:Поиск слов слева и справа от строки
"Programming is my passion"
Я хочу, чтобы извлечь слова слева и справа от "is"
: "Programming"
и "my"
.
Я хочу получить слова слева и справа от строки. Например, если вся строка:Поиск слов слева и справа от строки
"Programming is my passion"
Я хочу, чтобы извлечь слова слева и справа от "is"
: "Programming"
и "my"
.
\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+)
- столько символов слов, как это возможно, содержится в пронумерованных группеВы можете использовать следующие:
\b(\w+)\b\s+is\s+\b(\w+)\b
^^
Вы можете использовать это регулярное выражение также:
(\S+)\s+is\s+(\S+)
с переменными:
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
Вот одно решение;
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"
[Шляпы выключены] (http://askandyaboutclothes.com/wp-content/uploads/2011/12/HatTipCartoon.jpg) благородному пользователю SO, который проголосовал за этот ответ, поскольку голосование становится [редким] (http://stackoverflow.com/a/34595416/794242) –
Решение без регулярных выражений, но с 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')
def neighbours str, pattern
str.scan(/(\S*)\s+#{pattern}\s+(\S*)/).flatten
end
neighbours 'Programming is my passion', 'is'
#⇒ ["Programming", "my"]
Как следует эта функция работает, если приговор вместо '«Программирование это моя страсть, потому что это очень интересно»', так как в настоящее время существует два экземпляра «является» в предложении? – jeffdill2