Как я могу извлечь подстроку из строки в Ruby?
Пример:
String1 = "<name> <substring>"
Я хочу извлечь substring
из String1
(т. Е. Все, что было до последнего появления <
и >
).
String1.scan(/<([^>]*)>/).last.first
scan
создает массив, который для каждого <item>
in String1
содержит текст между <
и >
в одноэлементном массиве (потому что при использовании с регулярным выражением, содержащим группы захвата, сканирование создает массив, содержащий захваты для каждого совпадения). last
дает вам последний из этих массивов, а first
затем дает вам строку в нем.
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"
Не нужно использовать scan
, если нужен только один результат.
Нет необходимости использовать Python match
, когда у нас есть Ruby String[regexp,#]
.
См. Http://ruby-doc.org/core/String.html#method-i-5B-5D.
Примечание: str[regexp, capture] → new_str or nil
if we need only one result
на свое решение. Иmatch()[]
медленнее, потому что это два метода вместо одного.string[regex]
что в этом сценарии он может быть таким же читаемым, поэтому я лично использовал его.Вы можете легко использовать регулярное выражение для этого ...
Допускаем пробелы вокруг слова (но не оставляем их):
Или без разрешенных пробелов:
источник
<>
действительно должно быть последним в строке. Если, например, строкаfoo <bar> baz
разрешена (и должна давать результатbar
), это не сработает.Вот несколько более гибкий подход с использованием этого
match
метода. С его помощью вы можете извлечь более одной строки:источник
Более простое сканирование:
источник