Извлечение подстроки из строки в Ruby с помощью регулярного выражения
как я могу извлечь подстроку из строки в Ruby?
пример:
String1 = "<name> <substring>"
Я хочу, чтобы извлечь substring
С String1
(т. е. все в пределах последнего вхождения <
и >
).
5 ответов:
String1.scan(/<([^>]*)>/).last.first
scan
создает массив, который для каждого<item>
наString1
содержит текст между<
и>
в одноэлементном массиве (поскольку при использовании с регулярным выражением, содержащим группы захвата, scan создает массив, содержащий захваты для каждого соответствия).last
дает вам последний из этих массивов иfirst
затем дает вам строку.
"<name> <substring>"[/.*<([^>]*)/,1] => "substring"
нет необходимости использовать
scan
, если нам нужен только один результат.
Не нужно использоватьmatch
, когда у нас естьString[regexp,#]
.см.:http://ruby-doc.org/core/String.html#method-i-5B-5D
Примечание:
str[regexp, capture] → new_str or nil
Вы можете использовать регулярное выражение для этого довольно легко...
позволяя пробелы вокруг слова (но не сохраняя их):
str.match(/< ?([^>]+) ?>\Z/)[1]
или без пробелов:
str.match(/<([^>]+)>\Z/)[1]
вот немного более гибкий подход с использованием
match
метод. При этом вы можете извлечь более одной строки:s = "<ants> <pants>" matchdata = s.match(/<([^>]*)> <([^>]*)>/) # Use 'captures' to get an array of the captures matchdata.captures # ["ants","pants"] # Or use raw indices matchdata[0] # whole regex match: "<ants> <pants>" matchdata[1] # first capture: "ants" matchdata[2] # second capture: "pants"