Как найти подстроку, ближайшую к другой подстроке в Ruby? - PullRequest
0 голосов
/ 16 июня 2011

Допустим, у меня есть следующая строка:

здесь текст в предложении 55, а другой текст в том же предложении

Есть два случаяподстроки sentence в строке.Как найти экземпляр, ближайший к подстроке 55?

Я использую Ruby 1.9.2

Ответы [ 3 ]

4 голосов
/ 16 июня 2011

Разделить строку по маркеру:

first, last = str.split("55")

Расстояние от второго просто через #index:

last_dist = last.index("sentence")

Расстояние от первого немного веселее:

first_dist = first.reverse.index("sentence".reverse")

Сравнить:

result = first_dist < last_dist ? :first : :last
1 голос
/ 16 июня 2011

Более распространенное решение для более чем двух подстрок:

str = "text sub text text sub key text sub"
positions = []
last_pos = nil
key_pos = str.index('key')

while (last_pos = str.index('sub', (last_pos ? last_pos + 1 : 0)))
  positions << last_pos
end

p positions.map{|p| (p-key_pos).abs}.min
1 голос
/ 16 июня 2011
str = "here is some text in a sentence 55 and some other text still in the same sentence"
t = str.index('55')
p [str.index('sentence', t), str.rindex('sentence', t)].min_by{|pos| (pos-t).abs}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...